Метод 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,
который проверяет синтаксис выражения