Esempio n. 1
0
 /**
  * @param mixed $valueToCheck
  * @param int $valueVariableType
  * @param array $functions
  * @param mixed $parsedValue
  * @param int $parsedValueVariableType
  * 
  * @return Func\Condition
  * @throws FREST\Exception
  */
 private function checkForFunctions($valueToCheck, $valueVariableType, $functions, &$parsedValue, &$parsedValueVariableType)
 {
     $functionUsed = NULL;
     /** @var Func\Condition $function */
     foreach ($functions as $function) {
         $functionName = $function->getName();
         $functionParameters = $function->getParameters();
         $functionReplacements = $function->getReplacements();
         /** @var Func\FunctionParam $firstParameter */
         $firstParameter = $functionParameters[0];
         $beginsWithFunctionOpen = substr_compare("{$functionName}(", $valueToCheck, 0, strlen($functionName) + 1, TRUE) === 0;
         $endsWithFunctionClose = substr($valueToCheck, -1) === ')';
         if ($beginsWithFunctionOpen && $endsWithFunctionClose) {
             $functionUsed = $function;
             $innerValue = trim(substr($valueToCheck, strlen($functionName) + 1, -1));
             if (strlen($innerValue) == 0) {
                 throw new FREST\Exception(FREST\Exception::InvalidValue, "Empty value specified in Func '{$functionName}'");
             }
             if (isset($functionReplacements)) {
                 foreach ($functionReplacements as $old => $new) {
                     $innerValue = str_replace($old, $new, $innerValue);
                 }
             }
             $valuesToConcatenate = NULL;
             $innerValueVariableType = Type\Variable::stricterVariableType($firstParameter->getVariableType(), $valueVariableType);
             $castedValue = Type\Variable::castValue($innerValue, $innerValueVariableType);
             if (!isset($castedValue)) {
                 $variableTypeString = Type\Variable::getString($innerValueVariableType);
                 throw new FREST\Exception(FREST\Exception::InvalidType, "Expecting value for Func '{$functionName}' to be of type '{$variableTypeString}' but received '{$innerValue}'");
             }
             $parsedValue = $castedValue;
             $parsedValueVariableType = $innerValueVariableType;
             break;
             // found use of Func already, don't keep checking
         }
     }
     return $functionUsed;
 }