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

Метод compile класса ExpressionLanguage

Метод compile класса ExpressionLanguage преобразует строковое выражение в валидный PHP-код. Первым параметром передаётся выражение в виде строки. Вторым параметром можно передать массив имён переменных, доступных в выражении. Метод возвращает строку с готовым PHP-кодом, который можно сохранить в кеш или выполнить через eval. В отличие от метода evaluate, который сразу вычисляет результат, compile только генерирует код.

Синтаксис

public function compile(string $expression, array $names = []): string

Пример

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

<?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 { $expressionLanguage = new ExpressionLanguage(); $res = $expressionLanguage->compile('1 + 2'); return new Response($res); } } ?>

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

(1 + 2)

Пример

Давайте скомпилируем выражение с переменными, передав их имена вторым параметром:

<?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 { $expressionLanguage = new ExpressionLanguage(); $res = $expressionLanguage->compile('a + b', ['a', 'b']); return new Response($res); } } ?>

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

($a + $b)

Пример

Давайте скомпилируем выражение и выполним полученный код через eval, чтобы получить результат:

<?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 { $expressionLanguage = new ExpressionLanguage(); $code = $expressionLanguage->compile('a + b', ['a', 'b']); $a = 3; $b = 4; eval('$res = ' . $code . ';'); return new Response($res); } } ?>

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

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 { $expressionLanguage = new ExpressionLanguage(); $res = $expressionLanguage->compile('user.getName()', ['user']); return new Response($res); } } ?>

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

$user->getName()

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

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