Можно ли вычислить выражение переменной без eval в PHP? - PullRequest
2 голосов
/ 27 февраля 2012

Выражение для вычисления формы множественного числа для Gettext. Пример:

$expr = 'n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2';

с eval Я делаю что-то вроде:

$expr = str_replace('n','$n', $expr);

$n = 5;
$result = (int)eval("return $expr;");

Можно ли это сделать и без eval?

1 Ответ

3 голосов
/ 27 февраля 2012

Несмотря на то, что можно создать синтаксический анализатор, который будет способен анализировать ограниченное количество (вам нужны только тривиальные математические операторы для вычисления множественного числа), это не стоит того, что вы тратите время на его реализацию и производительность (очевидно, это будет медленнее).

Так что я бы лично выбрал eval() или просто внедрил бы функцию для каждого языка, который вам нужен для множественного числа.

Это один из случаев, когда я принимаю eval как не "зло", если его ввод предопределен вами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...