Overview

Namespaces

  • Peach
    • DF
    • DT
    • Http
      • Body
      • Header
    • Markup
    • Util

Classes

  • Peach\DF\Base64Codec
  • Peach\DF\CodecChain
  • Peach\DF\JsonCodec
  • Peach\DF\SerializationCodec
  • Peach\DF\Utf8Codec
  • Peach\DT\AbstractTime
  • Peach\DT\Clock
  • Peach\DT\Date
  • Peach\DT\Datetime
  • Peach\DT\DefaultClock
  • Peach\DT\FixedClock
  • Peach\DT\FormatWrapper
  • Peach\DT\HttpDateFormat
  • Peach\DT\OffsetClock
  • Peach\DT\ShiftFormat
  • Peach\DT\SimpleFormat
  • Peach\DT\TimeEquator
  • Peach\DT\Timestamp
  • Peach\DT\TimeWrapper
  • Peach\DT\UnixTimeFormat
  • Peach\DT\Util
  • Peach\DT\W3cDatetimeFormat
  • Peach\Http\Body
  • Peach\Http\Body\CodecRenderer
  • Peach\Http\Body\StringRenderer
  • Peach\Http\DefaultEndpoint
  • Peach\Http\Header\CookieItem
  • Peach\Http\Header\CookieOptions
  • Peach\Http\Header\HttpDate
  • Peach\Http\Header\NoField
  • Peach\Http\Header\QualityValues
  • Peach\Http\Header\Raw
  • Peach\Http\Header\SetCookie
  • Peach\Http\Header\Status
  • Peach\Http\Request
  • Peach\Http\Response
  • Peach\Http\Util
  • Peach\Markup\AbstractHelper
  • Peach\Markup\AbstractRenderer
  • Peach\Markup\BaseHelper
  • Peach\Markup\BreakControlWrapper
  • Peach\Markup\Builder
  • Peach\Markup\Code
  • Peach\Markup\Comment
  • Peach\Markup\ContainerElement
  • Peach\Markup\Context
  • Peach\Markup\DebugBuilder
  • Peach\Markup\DebugContext
  • Peach\Markup\DefaultBreakControl
  • Peach\Markup\DefaultBuilder
  • Peach\Markup\DefaultContext
  • Peach\Markup\Element
  • Peach\Markup\EmptyElement
  • Peach\Markup\HelperObject
  • Peach\Markup\HtmlHelper
  • Peach\Markup\Indent
  • Peach\Markup\MinimalBreakControl
  • Peach\Markup\NameBreakControl
  • Peach\Markup\NameValidator
  • Peach\Markup\NodeList
  • Peach\Markup\None
  • Peach\Markup\SgmlRenderer
  • Peach\Markup\Text
  • Peach\Markup\XmlRenderer
  • Peach\Util\AbstractMapEntry
  • Peach\Util\ArrayMap
  • Peach\Util\ArrayMapEntry
  • Peach\Util\Arrays
  • Peach\Util\DefaultComparator
  • Peach\Util\DefaultEquator
  • Peach\Util\HashMap
  • Peach\Util\HashMapEntry
  • Peach\Util\Strings
  • Peach\Util\Values

Interfaces

  • Peach\DF\Codec
  • Peach\DT\Format
  • Peach\DT\Time
  • Peach\Http\BodyRenderer
  • Peach\Http\Endpoint
  • Peach\Http\HeaderField
  • Peach\Http\MultiHeaderField
  • Peach\Http\SingleHeaderField
  • Peach\Markup\BreakControl
  • Peach\Markup\Component
  • Peach\Markup\Container
  • Peach\Markup\Helper
  • Peach\Markup\Node
  • Peach\Markup\Renderer
  • Peach\Util\Comparable
  • Peach\Util\Comparator
  • Peach\Util\Equator
  • Peach\Util\Map
  • Peach\Util\MapEntry
  • Overview
  • Namespace
  • Class
  1: <?php
  2: /*
  3:  * Copyright (c) 2015 @trashtoy
  4:  * https://github.com/trashtoy/
  5:  * 
  6:  * Permission is hereby granted, free of charge, to any person obtaining a copy of
  7:  * this software and associated documentation files (the "Software"), to deal in
  8:  * the Software without restriction, including without limitation the rights to use,
  9:  * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
 10:  * Software, and to permit persons to whom the Software is furnished to do so,
 11:  * subject to the following conditions:
 12:  * 
 13:  * The above copyright notice and this permission notice shall be included in all
 14:  * copies or substantial portions of the Software.
 15:  * 
 16:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 17:  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 18:  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 19:  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 20:  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 21:  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 22:  */
 23: /**
 24:  * PHP class file.
 25:  * @auhtor trashtoy
 26:  * @since  2.2.0
 27:  */
 28: namespace Peach\Http\Header;
 29: 
 30: use InvalidArgumentException;
 31: use Peach\Http\SingleHeaderField;
 32: use Peach\Util\Values;
 33: 
 34: /**
 35:  * HTTP レスポンスのステータスを表すクラスです.
 36:  * 
 37:  * このクラスは HTTP/1 におけるステータスライン, HTTP/2 における :status 擬似ヘッダーを表現します.
 38:  */
 39: class Status implements SingleHeaderField
 40: {
 41:     /**
 42:      * 3 桁の数字から成る文字列です.
 43:      * 
 44:      * @var string
 45:      */
 46:     private $code;
 47:     
 48:     /**
 49:      * HTTP ステータスの "Reason-phrase" をあらわす文字列です.
 50:      * 
 51:      * @var string
 52:      */
 53:     private $reasonPhrase;
 54:     
 55:     /**
 56:      * 指定されたステータスコードおよび Reason-Phrase からなる Status インスタンスを構築します.
 57:      * 
 58:      * @param string $code         "200", "404" など, 3 桁の数字から成る文字列
 59:      * @param string $reasonPhrase "OK", "Not Found" など, HTTP ステータスの Reason-Phrase に相当する文字列 (省略可能)
 60:      */
 61:     public function __construct($code, $reasonPhrase = "")
 62:     {
 63:         $this->code         = $this->cleanCode($code);
 64:         $this->reasonPhrase = $reasonPhrase;
 65:     }
 66:     
 67:     /**
 68:      * 引数を 3 桁の数字文字列に変換します.
 69:      * 
 70:      * @param  mixed  $code ステータスコードをあらわす文字列または整数
 71:      * @return string 3 桁の数字から成る文字列
 72:      * @throws InvalidArgumentException 引数がステータスコードとして妥当ではない場合
 73:      */
 74:     private function cleanCode($code)
 75:     {
 76:         $value = Values::stringValue($code);
 77:         if (!strlen($value)) {
 78:             throw new InvalidArgumentException("Code must not be empty");
 79:         }
 80:         if (!preg_match("/\\A[0-9]{3}\\z/", $value)) {
 81:             throw new InvalidArgumentException("Code must be composed of 3 digits.");
 82:         }
 83:         return $value;
 84:     }
 85:     
 86:     /**
 87:      * 3 桁のステータスコードを返します.
 88:      * 
 89:      * @return string
 90:      */
 91:     public function getCode()
 92:     {
 93:         return $this->code;
 94:     }
 95:     
 96:     /**
 97:      * このステータスの Reason-Phrase 部分を返します.
 98:      * 
 99:      * @return string
100:      */
101:     public function getReasonPhrase()
102:     {
103:         return $this->reasonPhrase;
104:     }
105:     
106:     /**
107:      * このメソッドは HTTP/2 ベースのレスポンスでのみ利用されます.
108:      * ステータスコードのみ返します.
109:      * 
110:      * @return string
111:      */
112:     public function format()
113:     {
114:         return $this->code;
115:     }
116:     
117:     /**
118:      * 文字列 ":status" を返します.
119:      * 
120:      * @return string このヘッダーの名前 (":status")
121:      */
122:     public function getName()
123:     {
124:         return ":status";
125:     }
126:     
127:     /**
128:      * この Status オブジェクトの情報を返します.
129:      * 返り値はステータスコードおよび Reason-Phrase から成る要素数 2 の配列となります.
130:      * 
131:      * @return array
132:      */
133:     public function getValue()
134:     {
135:         return array($this->code, $this->reasonPhrase);
136:     }
137:     
138:     /**
139:      * "200 OK" をあらわす Status オブジェクトを返します.
140:      * 
141:      * @return Status
142:      */
143:     public static function getOK()
144:     {
145:         // @codeCoverageIgnoreStart
146:         static $ok = null;
147:         if ($ok === null) {
148:             $ok = new self("200", "OK");
149:         }
150:         // @codeCoverageIgnoreEnd
151:         
152:         return $ok;
153:     }
154: }
155: 
PEACH2 API documentation generated by ApiGen