tienvx / assignments-evaluator
允许将 Symfony 表达式语言的表达式分配给变量
v1.0.1
2022-07-12 01:42 UTC
Requires
- php: ^7.4|^8.0
- symfony/expression-language: ^5.4|^6.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
Symfony 表达式语言 每个表达式只返回单个值。它不支持分配。这个库允许将表达式评估的结果分配给变量。它还支持多重分配。
安装
composer require tienvx/assignments-evaluator
文档
use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Tienvx\AssignmentsEvaluator\AssignmentsEvaluator; class Robot { public function sayHi(string $name): string { return sprintf('Hi %s!', $name); } } $assignmentsEvaluator = new AssignmentsEvaluator(new ExpressionLanguage()); var_dump($assignmentsEvaluator->evaluate( 'fullName = firstName~" "~lastName; hello = robot.sayHi(fullName)', [ 'firstName' => 'Madonna', 'lastName' => 'Jenkins', 'robot' => new Robot(), ] )); /* displays array(5) { ["firstName"]=> string(7) "Madonna" ["lastName"]=> string(7) "Jenkins" ["robot"]=> object(Robot)#8 (0) { } ["fullName"]=> string(15) "Madonna Jenkins" ["hello"]=> string(19) "Hi Madonna Jenkins!" } */ $assignmentsEvaluator->lint('title = "Dr."; firstName = "zane"; lastName = "stroman"; name = title~ucfirst(firstName)~" "~ucfirst(lastName)'); /* throw PHP Fatal error: Uncaught Tienvx\AssignmentsEvaluator\SyntaxError: Expression "title~ucfirst(firstName)~" "~ucfirst(lastName)" is invalid: The function "ucfirst" does not exist around position 7 for expression `title~ucfirst(firstName)~" "~ucfirst(lastName)`.. */