Вход Регистрация
Файл: framework/utils/CPropertyValue.php
Строк: 227
<?php
/**
 * CPropertyValue class file.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link http://www.yiiframework.com/
 * @copyright 2008-2013 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

/**
 * CPropertyValue is a helper class that provides static methods to convert component property values to specific types.
 *
 * CPropertyValue is commonly used in component setter methods to ensure
 * the new property value is of the specific type.
 * For example, a boolean-typed property setter method would be as follows,
 * <pre>
 * public function setPropertyName($value)
 * {
 *     $value=CPropertyValue::ensureBoolean($value);
 *     // $value is now of boolean type
 * }
 * </pre>
 *
 * Properties can be of the following types with specific type conversion rules:
 * <ul>
 * <li>string: a boolean value will be converted to 'true' or 'false'.</li>
 * <li>boolean: string 'true' (case-insensitive) will be converted to true,
 *            string 'false' (case-insensitive) will be converted to false.</li>
 * <li>integer</li>
 * <li>float</li>
 * <li>array: string starting with '(' and ending with ')' will be considered as
 *          as an array expression and will be evaluated. Otherwise, an array
 *          with the value to be ensured is returned.</li>
 * <li>object</li>
 * <li>enum: enumerable type, represented by an array of strings.</li>
 * </ul>
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @package system.utils
 * @since 1.0
 */
class CPropertyValue
{
    
/**
     * Converts a value to boolean type.
     * Note, string 'true' (case-insensitive) will be converted to true,
     * string 'false' (case-insensitive) will be converted to false.
     * If a string represents a non-zero number, it will be treated as true.
     * @param mixed $value the value to be converted.
     * @return boolean
     */
    
public static function ensureBoolean($value)
    {
        if (
is_string($value))
            return !
strcasecmp($value,'true') || $value!=0;
        else
            return (boolean)
$value;
    }

    
/**
     * Converts a value to string type.
     * Note, a boolean value will be converted to 'true' if it is true
     * and 'false' if it is false.
     * @param mixed $value the value to be converted.
     * @return string
     */
    
public static function ensureString($value)
    {
        if (
is_bool($value))
            return 
$value?'true':'false';
        else
            return (string)
$value;
    }

    
/**
     * Converts a value to integer type.
     * @param mixed $value the value to be converted.
     * @return integer
     */
    
public static function ensureInteger($value)
    {
        return (integer)
$value;
    }

    
/**
     * Converts a value to float type.
     * @param mixed $value the value to be converted.
     * @return float
     */
    
public static function ensureFloat($value)
    {
        return (float)
$value;
    }

    
/**
     * Converts a value to array type.
     * 
     * If the value is a string and it is in the form (a,b,c) then an array 
     * consisting of each of the elements will be returned. If the value is a string 
     * and it is not in this form then an array consisting of just the string will be returned,
     * if the string is empty an empty array will be returned. 
     * If the value is not a string then it will return an array containing that value or
     * the same value in case it is already an array.
     * @param mixed $value the value to be converted.
     * @return array
     */
    
public static function ensureArray($value)
    {
        if(
is_string($value))
        {
            
$value trim($value);
            
$len strlen($value);
            if (
$len >= && $value[0] == '(' && $value[$len-1] == ')')
            {
                try
                {
                    return eval(
'return array' $value ';');
                }
                catch (
ParseError $e)
                {
                    return array();
                }
            }
            else
                return 
$len>0?array($value):array();
        }
        else
            return (array)
$value;
    }

    
/**
     * Converts a value to object type.
     * @param mixed $value the value to be converted.
     * @return object
     */
    
public static function ensureObject($value)
    {
        return (object)
$value;
    }

    
/**
     * Converts a value to enum type.
     *
     * This method checks if the value is of the specified enumerable type.
     * A value is a valid enumerable value if it is equal to the name of a constant
     * in the specified enumerable type (class).
     * For more details about enumerable, see {@link CEnumerable}.
     *
     * @param string $value the enumerable value to be checked.
     * @param string $enumType the enumerable class name (make sure it is included before calling this function).
     * @return string the valid enumeration value
     * @throws CException if the value is not a valid enumerable value
     */
    
public static function ensureEnum($value,$enumType)
    {
        static 
$types=array();
        if(!isset(
$types[$enumType]))
            
$types[$enumType]=new ReflectionClass($enumType);
        if(
$types[$enumType]->hasConstant($value))
            return 
$value;
        else
            throw new 
CException(Yii::t('yii','Invalid enumerable value "{value}". Please make sure it is among ({enum}).',
                array(
'{value}'=>$value'{enum}'=>implode(', ',$types[$enumType]->getConstants()))));
    }
}
Онлайн: 1
Реклама