summaryrefslogtreecommitdiff
path: root/framework/utils/CPropertyValue.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/utils/CPropertyValue.php')
-rw-r--r--framework/utils/CPropertyValue.php158
1 files changed, 158 insertions, 0 deletions
diff --git a/framework/utils/CPropertyValue.php b/framework/utils/CPropertyValue.php
new file mode 100644
index 0000000..03e9ba2
--- /dev/null
+++ b/framework/utils/CPropertyValue.php
@@ -0,0 +1,158 @@
+<?php
+/**
+ * CPropertyValue class file.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link http://www.yiiframework.com/
+ * @copyright Copyright &copy; 2008-2011 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>
+ * @version $Id: CPropertyValue.php 2799 2011-01-01 19:31:13Z qiang.xue $
+ * @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 value
+ * is not a string then
+ * @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 >= 2 && $value[0] == '(' && $value[$len-1] == ')')
+ {
+ eval('$array=array'.$value.';');
+ 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()))));
+ }
+}