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) 2014 @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.0.0
 27:  */
 28: namespace Peach\Util;
 29: 
 30: /**
 31:  * 値の各種変換を行うユーティリティクラスです.
 32:  */
 33: class Values
 34: {
 35:     /**
 36:      * このクラスはインスタンス化することができません.
 37:      */
 38:     private function __construct() {}
 39:     
 40:     /**
 41:      * 指定された値を整数に変換します.
 42:      * この関数は変換処理に {@link http://jp1.php.net/manual/ja/function.intval.php intval()} を利用します.
 43:      * 
 44:      * 最小値が指定されている場合,
 45:      * 変換後の値が最小値より小さければ最小値を返します.
 46:      * 
 47:      * 最小値と最大値の両方が指定されている場合,
 48:      * 変換後の値が最大値より大きければ最大値を返します.
 49:      * 
 50:      * 最小値が最大値より大きい場合, 最大値の指定は無視されます.
 51:      * 最大値のみ指定したい場合は, 最小値を NULL にしてください.
 52:      * 
 53:      * 引数にオブジェクトが指定された場合は 1 として扱います.
 54:      * 
 55:      * @param  mixed $value 変換元の値
 56:      * @param  int   $min   最小値 (省略可). 変換後の値がこの値よりも小さい場合は, この値を返す.
 57:      * @param  int   $max   最大値 (省略可). 変換後の値がこの値よりも大きい場合は, この値を返す.
 58:      * @return int          引数を整数に変換した値
 59:      */
 60:     public static function intValue($value, $min = null, $max = null)
 61:     {
 62:         if (is_object($value)) {
 63:             return self::intValue(1, $min, $max);
 64:         }
 65:         if (!is_int($value)) {
 66:             $iValue = intval($value);
 67:             return self::intValue($iValue, $min, $max);
 68:         }
 69:         if (isset($min) && isset($max) && $max < $min) {
 70:             return self::intValue($value, $min);
 71:         }
 72:         if (isset($min) && $value < $min) {
 73:             return $min;
 74:         }
 75:         if (isset($max) && $max < $value) {
 76:             return $max;
 77:         }
 78:         
 79:         return $value;
 80:     }
 81:     
 82:     /**
 83:      * 指定された値を文字列型に変換します.
 84:      * 
 85:      * __toString() が定義されているオブジェクトの場合は __toString() の結果,
 86:      * それ以外のオブジェクトはクラス名を返します.
 87:      * リソース型の場合は {@link http://jp1.php.net/manual/ja/function.get-resource-type.php get_resource_type()} にリソース ID
 88:      * を付け足した結果を返します.
 89:      * それ以外は string 型にキャストした結果を返します.
 90:      * 
 91:      * @param  mixed  $value 変換対象の値
 92:      * @return string        変換後の文字列
 93:      */
 94:     public static function stringValue($value)
 95:     {
 96:         if (is_object($value)) {
 97:             return (method_exists($value, '__toString')) ? $value->__toString() : get_class($value);
 98:         }
 99:         if (is_resource($value)) {
100:             $parts = explode(" ", strval($value));
101:             $id    = array_pop($parts);
102:             return get_resource_type($value) . " " . $id;
103:         }
104:         
105:         return is_string($value) ? $value : strval($value);
106:     }
107:     
108:     /**
109:      * 指定された値を配列に変換します.
110:      * 引数が配列の場合は引数をそのまま返します.
111:      * 配列以外の値の場合は, 第二引数によって結果が変わります.
112:      * 
113:      * - $wrap = TRUE の場合, 引数を長さ 1 の配列として返す.
114:      * - $wrap = FALSE の場合, 空の配列を返す.
115:      * 
116:      * デフォルトでは $wrap = FALSE となります.
117:      * 
118:      * @param  mixed $value 変換元の値.
119:      * @param  bool  $wrap  配列以外の値の場合に, 長さ 1 の配列に変換する場合は TRUE
120:      * @return array        変換後の配列
121:      */
122:     public static function arrayValue($value, $wrap = false)
123:     {
124:         if (is_array($value)) {
125:             return $value;
126:         }
127:         
128:         return $wrap ? array($value) : array();
129:     }
130:     
131:     /**
132:      * 指定された値を bool 型に変換します.
133:      * この関数は "Yes", "No", "True", "False", "OK", "NG" などの文字列を
134:      * bool に変換する用途を想定したものです.
135:      * 
136:      * 引数が bool 型の場合は引数をそのまま返します.
137:      * 
138:      * 引数が文字列型の場合,
139:      * 先頭の 1 バイトが T, Y, O のいずれかの場合は TRUE,
140:      * 先頭の 1 バイトが F, N のいずれかの場合は FALSE,
141:      * それ以外は文字列を bool にキャストした結果を返します.
142:      * (大文字・小文字は区別しません)
143:      * 
144:      * 引数が数値型の場合, bool にキャストした結果を返します.
145:      * すなわち 0 以外の値は TRUE, 0 の場合は FALSE を返します.
146:      * 
147:      * 以上の条件にあてはまらない値の場合,
148:      * $defaultValue が NULL または未指定の場合は第 1 引数を
149:      * bool にキャストした結果を返します.
150:      * $defaultValue が指定されている場合はその bool 値を返します.
151:      * 
152:      * @param  mixed $value        変換対象の値
153:      * @param  bool  $defaultValue デフォルトの返り値
154:      * @return bool                変換後の bool 値
155:      */
156:     public static function boolValue($value, $defaultValue = null)
157:     {
158:         if (is_bool($value)) {
159:             return $value;
160:         }
161:         if (is_string($value)) {
162:             return self::stringToBool($value, $defaultValue);
163:         }
164:         if (is_numeric($value)) {
165:             return (bool) $value;
166:         }
167:         
168:         return self::handleBoolValue($value, $defaultValue);
169:     }
170:     
171:     /**
172:      * 文字列を bool 型にキャストします.
173:      * @param  string $value
174:      * @param  bool   $defaultValue
175:      * @return bool
176:      */
177:     private static function stringToBool($value, $defaultValue = null)
178:     {
179:         // @codeCoverageIgnoreStart
180:         static $tPrefix = null, $fPrefix = null;
181:         if (!isset($tPrefix)) {
182:             $tPrefix = array("t", "y", "o");
183:             $fPrefix = array("f", "n");
184:         }
185:         // @codeCoverageIgnoreEnd
186:         
187:         $prefix = strtolower(substr($value, 0, 1));
188:         if (in_array($prefix, $tPrefix)) {
189:             return true;
190:         }
191:         if (in_array($prefix, $fPrefix)) {
192:             return false;
193:         }
194:         
195:         return self::handleBoolValue($value, $defaultValue);
196:     }
197:     
198:     /**
199:      * デフォルト値に NULL 以外の値が指定されている場合はデフォルト値の bool 表現を,
200:      * そうでない場合は第一引数の bool 表現を返します.
201:      * @param  mixed $value
202:      * @param  bool  $defaultValue
203:      * @return bool
204:      */
205:     private static function handleBoolValue($value, $defaultValue = null)
206:     {
207:         return isset($defaultValue) ? (bool) $defaultValue : (bool) $value;
208:     }
209:     
210:     /**
211:      * 指定された値の型を返します.
212:      * 内部関数の {@link http://jp1.php.net/manual/ja/function.gettype.php gettype()} とほぼ同じ動作をしますが,
213:      * 引数にオブジェクトを指定した場合に文字列 "object"
214:      * ではなくその値のクラス名を返すところが異なります.
215:      * 
216:      * @param mixed $var 検査対象の値
217:      */
218:     public static function getType($var)
219:     {
220:         return is_object($var) ? get_class($var) : gettype($var);
221:     }
222: }
223: 
PEACH2 API documentation generated by ApiGen