2010-08-18 40 views
2

在我的工作对遗留代码库,有一个条件评价其接受用户输入,以建立一个条件。然后使用php eval()在运行时评估这个条件。不使用eval解决此问题的最佳方法是什么?替代关于“的eval()uating”的条件

例如,我在用户界面中输入了条件“1> 0”。这必须进行评估并返回结果(在本例中为true)。有什么建议么?

我们知道,如果这个问题似乎含糊其辞,我会试着更好的解释。

+0

你可以创建自己的标记生成器,或启动PHP内置的一个,如果你的条件语法是足够相似:http://php.net/token-get-all – janmoesen 2010-08-18 11:42:48

回答

2

的上PHPClasses evalMath parser过提供用于评估这种类型表达的安全框架。

+0

+1。我会尝试一下..任何想法如果我将PHP函数传递给解析器会发生什么? – pinaki 2010-08-18 11:40:45

+0

如果你特别需要的PHP函数(如字符串操作或其他),而不是简单的数学函数,那么它很容易把这些东西加到内置的功能列表 – 2010-08-18 11:42:04

+0

伟大的..好像它会做......会试试看并看到它可以导致...感谢您的快速回复.. – pinaki 2010-08-18 11:45:53

1

我想说的模式最适合这将是Specification pattern

在计算机编程中,规范模式是一种特定的软件设计模式,可以通过使用布尔逻辑将业务逻辑链接在一起来重组业务逻辑。

但是,这种方法会要求您为用户给出的输入编写解析器,以便将条件安全地转换为规范实例。根据所允许条件的复杂程度,这可能不是一件容易的事。

您可以通过为断言创建带有create_function的lambda函数来实现此目的,但这与用户输入时使用eval一样不安全。

+0

+1似乎很有趣,不确定我是否可以使用它,因为这可能需要重大更改...感谢无论如何的答案,我会追求它,并看到它导致.. – pinaki 2010-08-18 11:44:55