本文整理汇总了PHP中QType::TypeFromDoc方法的典型用法代码示例。如果您正苦于以下问题:PHP QType::TypeFromDoc方法的具体用法?PHP QType::TypeFromDoc怎么用?PHP QType::TypeFromDoc使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QType
的用法示例。
在下文中一共展示了QType::TypeFromDoc方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: CastValueTo
private static function CastValueTo($mixItem, $strNewType)
{
$strOriginalType = gettype($mixItem);
switch (QType::TypeFromDoc($strNewType)) {
case QType::Boolean:
if ($strOriginalType == QType::Boolean) {
return $mixItem;
}
if (is_null($mixItem)) {
return false;
}
if (strlen($mixItem) == 0) {
return false;
}
if (strtolower($mixItem) == 'false') {
return false;
}
settype($mixItem, $strNewType);
return $mixItem;
case QType::Integer:
if ($strOriginalType == QType::Boolean) {
throw new QInvalidCastException(sprintf('Unable to cast %s value to %s: %s', $strOriginalType, $strNewType, $mixItem));
}
if (strlen($mixItem) == 0) {
return null;
}
if ($strOriginalType == QType::Integer) {
return $mixItem;
}
// Check to make sure the value hasn't changed significantly
$intItem = $mixItem;
settype($intItem, $strNewType);
$mixTest = $intItem;
settype($mixTest, $strOriginalType);
// If the value hasn't changed, it's safe to return the casted value
if ((string) $mixTest === (string) $mixItem) {
return $intItem;
}
// if casting changed the value, but we have a valid integer, return with a string cast
if (preg_match('/^-?\\d+$/', $mixItem) === 1) {
return (string) $mixItem;
}
// any other scenarios is an invalid cast
throw new QInvalidCastException(sprintf('Unable to cast %s value to %s: %s', $strOriginalType, $strNewType, $mixItem));
case QType::Float:
if ($strOriginalType == QType::Boolean) {
throw new QInvalidCastException(sprintf('Unable to cast %s value to %s: %s', $strOriginalType, $strNewType, $mixItem));
}
if (strlen($mixItem) == 0) {
return null;
}
if ($strOriginalType == QType::Float) {
return $mixItem;
}
if (!is_numeric($mixItem)) {
throw new QInvalidCastException(sprintf('Invalid float: %s', $mixItem));
}
// Check to make sure the value hasn't changed significantly
$fltItem = $mixItem;
settype($fltItem, $strNewType);
$mixTest = $fltItem;
settype($mixTest, $strOriginalType);
//account for any scientific notation that results
//find out what notation is currently being used
$i = strpos($mixItem, '.');
$precision = $i === false ? 0 : strlen($mixItem) - $i - 1;
//and represent the casted value the same way
$strTest = sprintf('%.' . $precision . 'f', $fltItem);
// If the value hasn't changed, it's safe to return the casted value
if ((string) $strTest === (string) $mixItem) {
return $fltItem;
}
// the changed value could be the result of loosing precision. Return the original value with no cast
return $mixItem;
case QType::String:
if ($strOriginalType == QType::String) {
return $mixItem;
}
// Check to make sure the value hasn't changed significantly
$strItem = $mixItem;
settype($strItem, $strNewType);
$mixTest = $strItem;
settype($mixTest, $strOriginalType);
// Has it?
$blnSame = true;
if ($strOriginalType == QType::Float) {
// type conversion from float to string affects precision and can throw off the comparison
// so we need to use a comparison check using an epsilon value instead
$epsilon = 1.0E-14;
$diff = abs($mixItem - $mixTest);
if ($diff > $epsilon) {
$blnSame = false;
}
} else {
if ($mixTest != $mixItem) {
$blnSame = false;
}
}
if (!$blnSame) {
//This is an invalid cast
//.........这里部分代码省略.........
示例2: SetupSoapMethods
protected function SetupSoapMethods(ReflectionClass $objReflection)
{
$objReflectionMethods = $objReflection->getMethods();
if ($objReflectionMethods) {
foreach ($objReflectionMethods as $objReflectionMethod) {
if ($objReflectionMethod->isPublic() && !$objReflectionMethod->isAbstract() && !$objReflectionMethod->isStatic() && !$objReflectionMethod->isConstructor() && !$objReflectionMethod->isDestructor() && $objReflectionMethod->getDeclaringClass()->getName() != 'QBaseClass') {
$objMethod = new QSoapMethod($objReflectionMethod->getName());
$strComments = $objReflectionMethod->getDocComment();
if ($strComments) {
// Use Comments to Calculate strType and blnArray
$strTypeArray = array();
$blnArrayArray = array();
$strCommentArray = explode("\n", $strComments);
foreach ($strCommentArray as $strCommentLine) {
$strCommentLine = trim($strCommentLine);
$strMatches = array();
preg_match_all("/[\\s]*\\*[\\s]*@param[\\s]+([a-zA-Z0-9_]+)(\\[\\])?[\\s]+[&\$]*([a-zA-Z0-9_]+)/", $strCommentLine, $strMatches);
if (count($strMatches) == 4 && count($strMatches[0]) == 1 && count($strMatches[1]) == 1 && count($strMatches[2]) == 1 && count($strMatches[3]) == 1) {
$strType = $strMatches[1][0];
$strArray = $strMatches[2][0];
$strName = $strMatches[3][0];
$strTypeArray[$strName] = $strType;
if ($strArray == '[]') {
$blnArrayArray[$strName] = true;
} else {
$blnArrayArray[$strName] = false;
}
} else {
$strMatches = array();
preg_match_all("/[\\s]*\\*[\\s]*@return[\\s]+([a-zA-Z0-9_]+)(\\[\\])?/", $strCommentLine, $strMatches);
if (count($strMatches) == 3 && count($strMatches[0]) == 1 && count($strMatches[1]) == 1 && count($strMatches[2]) == 1) {
$strType = $strMatches[1][0];
$strArray = $strMatches[2][0];
if ($strArray == '[]') {
$blnArray = true;
} else {
$blnArray = false;
}
try {
$strType = QType::TypeFromDoc($strType);
} catch (QCallerException $objExc) {
$objExc->IncrementOffset();
throw $objExc;
}
if ($strType != 'void') {
$objMethod->ReturnParameter = new QSoapParameter($objMethod->Name . 'Result', $strType, $blnArray, false);
}
}
}
}
$objParameters = $objReflectionMethod->getParameters();
if ($objParameters) {
foreach ($objParameters as $objParameter) {
$blnArray = false;
$strName = $objParameter->getName();
if (array_key_exists($strName, $strTypeArray)) {
try {
$strType = QType::TypeFromDoc($strTypeArray[$strName]);
} catch (QCallerException $objExc) {
$objExc->IncrementOffset();
throw $objExc;
}
} else {
throw new QCallerException('Unable to determine Parameter Type for Method from PHPDoc Comment: ' . $objReflectionMethod->getName() . '(' . $strName . ')');
}
if (array_key_exists($strName, $blnArrayArray)) {
$blnArray = $blnArrayArray[$strName];
}
$objMethod->AddParameter(new QSoapParameter($strName, $strType, $blnArray, $objParameter->isPassedByReference()));
}
}
array_push($this->objMethodArray, $objMethod);
}
}
}
}
}
示例3: CastValueTo
private static function CastValueTo($mixItem, $strType)
{
$strItemType = gettype($mixItem);
switch (QType::TypeFromDoc($strType)) {
case QType::Boolean:
if ($strItemType == QType::Boolean) {
return $mixItem;
}
if (is_null($mixItem)) {
return false;
}
if (strlen($mixItem) == 0) {
return false;
}
if (strtolower($mixItem) == 'false') {
return false;
}
settype($mixItem, $strType);
return $mixItem;
case QType::Integer:
if (strlen($mixItem) == 0) {
return null;
}
if ($mixItem !== true && ((string) (int) $mixItem === (string) $mixItem || preg_match('/^-?\\d+$/', $mixItem) === 1)) {
return $mixItem;
} else {
throw new QInvalidCastException(sprintf('Invalid integer: %s', $mixItem));
}
case QType::Float:
if (strlen($mixItem) == 0) {
return null;
}
if (!is_numeric($mixItem)) {
throw new QInvalidCastException(sprintf('Invalid float: %s', $mixItem));
}
return $mixItem;
case QType::String:
$mixOriginal = $mixItem;
settype($mixItem, $strType);
// Check to make sure the value hasn't changed significantly
$mixTest = $mixItem;
settype($mixTest, gettype($mixOriginal));
// Has it?
if ($mixTest != $mixOriginal) {
// Yes -- therefore this is an invalid cast
throw new QInvalidCastException(sprintf('Unable to cast %s value to %s: %s', $strItemType, $strType, $mixOriginal));
}
return $mixItem;
default:
throw new QInvalidCastException(sprintf('Unable to cast %s value to unknown type %s', $strItemType, $strType));
}
}