Альтернатива для 'eval () uating' условия - PullRequest
2 голосов
/ 18 августа 2010

В устаревшей кодовой базе, над которой я работаю, есть оценщик условий, который принимает пользовательский ввод для построения условия.Это условие затем оценивается во время выполнения с помощью php eval ().Каков наилучший способ решить эту проблему без использования eval.

Например, у меня есть условие "1> 0", введенное пользователем в пользовательском интерфейсе.Это должно быть оценено, и результат (true в этом случае) возвращается.Любые предложения?

Дайте знать, если проблема кажется расплывчатой, я постараюсь объяснить лучше.

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Синтаксический анализатор evalMath over в PHPClasses предоставляет безопасную среду для оценки этого типа выражения.

1 голос
/ 18 августа 2010

Я бы сказал, что наиболее подходящим для этого шаблоном будет шаблон спецификации .

В компьютерном программировании шаблон спецификации - это конкретный шаблон проектирования программного обеспечения, в котором бизнес-логика может быть объединена путем объединения бизнес-логики вместе с использованием логической логики.

Однако этот подход потребует от вас написания синтаксического анализатора для ввода данных ваших пользователей, чтобы безопасно преобразовать условия в экземпляры спецификации. В зависимости от сложности разрешенных условий это может быть непростой задачей.

Вы можете достичь того же, создав лямбда-функции с create_function для утверждений, но это так же небезопасно, как и использование eval, когда дело доходит до ввода пользователя.

...