Метод evaluate класса ExpressionLanguage
Метод evaluate класса ExpressionLanguage
выполняет переданное строковое выражение и возвращает
полученный результат. Первым параметром передаётся
строка выражения. Вторым параметром передаётся массив
значений переменных, доступных внутри выражения.
Компонент ExpressionLanguage позволяет
безопасно вычислять условия и формулы, не используя
функцию eval.
Синтаксис
public function evaluate(string $expression, array $values = []): mixed
Пример
Давайте вычислим простое арифметическое выражение:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\HttpFoundation\Response;
class ExpressionController extends AbstractController
{
public function index(): Response
{
$expressionLanguage = new ExpressionLanguage();
$res = $expressionLanguage->evaluate('1 + 2 * 3');
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
"7"
Пример
Давайте передадим значения переменных через второй параметр:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\HttpFoundation\Response;
class ExpressionController extends AbstractController
{
public function index(): Response
{
$expressionLanguage = new ExpressionLanguage();
$res = $expressionLanguage->evaluate(
'price * quantity',
['price' => 10, 'quantity' => 5]
);
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
"50"
Пример
Давайте вычислим логическое выражение и вернём результат в виде строки:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\HttpFoundation\Response;
class ExpressionController extends AbstractController
{
public function index(): Response
{
$expressionLanguage = new ExpressionLanguage();
$res = $expressionLanguage->evaluate(
'user.age >= 18 and user.active == true',
['user' => ['age' => 20, 'active' => true]]
);
return new Response($res ? 'true' : 'false');
}
}
?>
Результат выполнения кода:
"true"
Пример
Давайте используем встроенные функции min и max:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\HttpFoundation\Response;
class ExpressionController extends AbstractController
{
public function index(): Response
{
$expressionLanguage = new ExpressionLanguage();
$res = $expressionLanguage->evaluate(
'max(1, 5, 3) + min(10, 2)'
);
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
"7"
Смотрите также
-
класс
ExpressionLanguage,
который позволяет безопасно вычислять выражения -
метод
compile,
который компилирует выражение в PHP-код -
метод
lint,
который проверяет синтаксис выражения -
метод
register,
который регистрирует новую функцию в выражении