В устаревшей кодовой базе, над которой я работаю, есть оценщик условий, который принимает ввод пользователя для построения условия. Это условие затем оценивается во время выполнения с использованием php eval (). Каков наилучший способ решить эту проблему без использования eval.
Например, у меня есть условие «1> 0», введенное пользователем в пользовательском интерфейсе. Это нужно оценить, и результат (true в этом случае) вернется. Какие-либо предложения?
Дай знать, если проблема кажется расплывчатой, я постараюсь лучше объяснить.
Анализатор evalMath на PHPClasses обеспечивает безопасную структуру для оценки этого типа выражения.
Я бы сказал, что наиболее подходящим для этого шаблоном будет шаблон спецификации .
В компьютерном программировании шаблон спецификации представляет собой конкретный шаблон разработки программного обеспечения, при котором бизнес-логику можно объединить, объединив бизнес-логику, используя логическую логику.
Однако этот подход потребует от вас написать парсер для ввода, заданный вашими пользователями, чтобы безопасно преобразовать условия в экземпляры спецификации. В зависимости от сложности разрешенных условий это может быть непростой задачей.
Вы могли бы добиться этого, создав лямбда-функции с помощью create_function
для утверждений, но это так же небезопасно, как использование eval
когда речь идет о пользовательском вводе.