private function evaluateExpression($expr) { if (in_array($expr->getExpressionType(), Config::$allowedExpressionTypes) and in_array($expr->getEvaluationMethod(), Config::$allowedExpressionTypeMethods)) { $reflClass = new ReflectionClass($expr->getEvaluationMethod()); if ($reflClass->implementsInterface($expr->getExpressionType())) { $reflMethod = $reflClass->getMethod(Config::getMethodForExpression($expr)); $arguments = array(); $methodParams = $expr->getMethodParameters(); foreach ($reflMethod->getParameters() as $param) { /* @var $param ReflectionParameter */ if ($param->getName() == "usersArray" and isset($methodParams[$param->getName()])) { if (!is_array($methodParams[$param->getName()])) { $arguments[] = array_keys($this->userExpressionResult[$methodParams[$param->getName()]]); } else { $arguments[] = $methodParams[$param->getName()]; } } else { if (isset($methodParams[$param->getName()])) { $arguments[] = $methodParams[$param->getName()]; } else { if ($param->getName() == "objectList") { $arguments[] = $this->objectList; } else { if ($param->isDefaultValueAvailable()) { $arguments[] = $param->getDefaultValue(); } else { $arguments[] = Config::getDefaultValueForParameter($param); } } } } } //print_r($arguments); /** * TODO: improve getting methods!! (eval) */ $methodClass = $this->getMethod($expr->getEvaluationMethod()); $result = $reflMethod->invokeArgs($methodClass, $arguments); //print_r($result); return $result; } else { //method doesnt support expression type return false; } } else { //method or expression type not allowed return false; } }