complete Evaluators list + autoload

This commit is contained in:
odain
2025-09-03 16:48:40 +02:00
parent 794a9afe3e
commit c14ac90a13
42 changed files with 522 additions and 80 deletions

View File

@@ -0,0 +1,36 @@
<?php
namespace Combodo\iTop\PhpParser\Evaluation;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\MethodCall;
use ReflectionClass;
class MethodCallEvaluator extends AbstractExprEvaluator {
public function GetHandledExpressionType(): ?string {
return MethodCall::class;
}
public function Evaluate(Expr $oExpr): mixed {
/** @var MethodCall $oExpr */
$oVar = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->var);
if (is_null($oVar)) {
return null;
}
$aArgs = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->args);
$sName = PhpExpressionEvaluator::GetInstance()->EvaluateExpression($oExpr->name);
$oReflectionClass = new ReflectionClass(get_class($oVar));
$oMethods = $oReflectionClass->getMethods();
if (array_key_exists($sName, $oMethods)){
$oMethods = $oMethods[$sName];
if ($oMethods->isPublic()){
return $oMethods->invokeArgs($oVar, $aArgs);
}
}
return null;
}
}