在我的工作对遗留代码库,有一个条件评价其接受用户输入,以建立一个条件。然后使用php eval()在运行时评估这个条件。不使用eval解决此问题的最佳方法是什么?替代关于“的eval()uating”的条件
例如,我在用户界面中输入了条件“1> 0”。这必须进行评估并返回结果(在本例中为true)。有什么建议么?
我们知道,如果这个问题似乎含糊其辞,我会试着更好的解释。
在我的工作对遗留代码库,有一个条件评价其接受用户输入,以建立一个条件。然后使用php eval()在运行时评估这个条件。不使用eval解决此问题的最佳方法是什么?替代关于“的eval()uating”的条件
例如,我在用户界面中输入了条件“1> 0”。这必须进行评估并返回结果(在本例中为true)。有什么建议么?
我们知道,如果这个问题似乎含糊其辞,我会试着更好的解释。
的上PHPClasses evalMath parser过提供用于评估这种类型表达的安全框架。
我想说的模式最适合这将是Specification pattern。
在计算机编程中,规范模式是一种特定的软件设计模式,可以通过使用布尔逻辑将业务逻辑链接在一起来重组业务逻辑。
但是,这种方法会要求您为用户给出的输入编写解析器,以便将条件安全地转换为规范实例。根据所允许条件的复杂程度,这可能不是一件容易的事。
您可以通过为断言创建带有create_function
的lambda函数来实现此目的,但这与用户输入时使用eval
一样不安全。
+1似乎很有趣,不确定我是否可以使用它,因为这可能需要重大更改...感谢无论如何的答案,我会追求它,并看到它导致.. – pinaki 2010-08-18 11:44:55
你可以创建自己的标记生成器,或启动PHP内置的一个,如果你的条件语法是足够相似:http://php.net/token-get-all – janmoesen 2010-08-18 11:42:48