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

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

Метод register класса ExpressionLanguage добавляет пользовательскую функцию в язык выражений. Первым параметром передаётся имя функции (строка), вторым - вызываемый объект (callable), который будет выполнен при вызове этой функции в выражении. Зарегистрированные функции доступны во всех выражениях, вычисляемых данным экземпляром ExpressionLanguage.

Также метод может принимать объект, реализующий интерфейс ExpressionFunctionProviderInterface, который содержит набор функций для регистрации.

Синтаксис

public function register(string $name, callable $compiler, callable $evaluator = null): void
public function register(ExpressionFunctionProviderInterface $provider): void

Пример

Давайте зарегистрируем функцию multiply, которая умножает два числа:

<?php namespace AppService; use SymfonyComponentExpressionLanguageExpressionLanguage; class ExpressionService { public function calculate(): int { $el = new ExpressionLanguage(); $el->register('multiply', function ($a, $b) { return $a * $b; }, function ($a, $b) { return $a * $b; }); return $el->evaluate('multiply(3, 4)'); } } ?>

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

12

Пример

Давайте зарегистрируем функцию greet, которая возвращает приветствие для имени:

<?php namespace AppService; use SymfonyComponentExpressionLanguageExpressionLanguage; class ExpressionService { public function greet(): string { $el = new ExpressionLanguage(); $el->register('greet', function ($name) { return 'hello ' . $name; }, function ($name) { return 'hello ' . $name; }); return $el->evaluate('greet("user")'); } } ?>

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

"hello user"

Пример

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

<?php namespace AppService; use SymfonyComponentExpressionLanguageExpressionLanguage; class ExpressionService { public function check(): bool { $el = new ExpressionLanguage(); $el->register('startsWith', function ($str, $prefix) { return str_starts_with($str, $prefix); }, function ($str, $prefix) { return str_starts_with($str, $prefix); }); $res = $el->evaluate('startsWith(name, "art")', [ 'name' => 'article', ]); return $res; } } ?>

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

true

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

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