/** * Used to cast a variable to another type. Allows for moderate * support of strongly-named types. * * Will throw an exception if the cast fails, causes unexpected side effects, * if attempting to cast an object to a value (or vice versa), or if an object * is being cast to a class that isn't a subclass (e.g. parent). The exception * thrown will be an InvalidCastException, which extends CallerException. * * @param mixed $mixItem the value, array or object that you want to cast * @param string $strType the type to cast to. Can be a QType::XXX constant (e.g. QType::Integer), or the name of a Class * @return mixed the passed in value/array/object that has been cast to strType */ public static final function Cast($mixItem, $strType) { // Automatically Return NULLs if (is_null($mixItem)) { return null; } // Figure out what PHP thinks the type is $strPhpType = gettype($mixItem); switch ($strPhpType) { case QType::Object: try { return QType::CastObjectTo($mixItem, $strType); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case QType::String: case QType::Integer: case QType::Float: case QType::Boolean: try { return QType::CastValueTo($mixItem, $strType); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case QType::ArrayType: try { return QType::CastArrayTo($mixItem, $strType); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } case QType::Resource: // Cannot Cast Resources throw new QInvalidCastException('Resources cannot be cast'); default: // Could not determine type throw new QInvalidCastException(sprintf('Unable to determine type of item to be cast: %s', $mixItem)); } }