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

Класс ExpressionLanguage

Класс ExpressionLanguage предоставляет движок для вычисления строковых выражений. Он используется в различных компонентах Symfony: в безопасности, в маршрутизации, в DI-контейнере и в аннотациях. Первым параметром в методы передаётся строка выражения, а вторым - массив значений переменных, доступных внутри выражения.

Синтаксис

<?php use Symfony\Component\ExpressionLanguage\ExpressionLanguage; $el = new ExpressionLanguage(); $res = $el->evaluate($expression, $values); ?>

Пример

Давайте вычислим простое арифметическое выражение:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(): Response { $el = new ExpressionLanguage(); return new Response((string) $el->evaluate('1 + 2 * 3')); } } ?>

Результат выполнения кода:

7

Пример

Давайте передадим переменные в выражение через второй параметр:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(): Response { $el = new ExpressionLanguage(); $res = $el->evaluate( 'user == "abcde" and count > 3', ['user' => 'abcde', 'count' => 5] ); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

true

Пример

Давайте используем объект внутри выражения и обратимся к его свойству:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(): Response { $el = new ExpressionLanguage(); $article = new \stdClass(); $article->title = 'hello'; $article->published = true; $res = $el->evaluate( 'article.published ? article.title : "draft"', ['article' => $article] ); return new Response($res); } } ?>

Результат выполнения кода:

"hello"

Смотрите также

  • метод evaluate,
    который вычисляет выражение
  • метод compile,
    который компилирует выражение в PHP-код
  • метод lint,
    который проверяет синтаксис выражения
  • метод register,
    который регистрирует новую функцию в языке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить