РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1044 of 1361 menu

Метод 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,
    который регистрирует новую функцию в выражении
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить