在我正在处理的遗留代码库中,有一个条件评估器接受用户输入来构建条件。然后使用php eval()在运行时评估此条件。在不使用eval的情况下解决此问题的最佳方法是什么。
例如我在UI中输入了条件“1> 0”。这必须进行评估,并返回结果(在本例中为true)。有什么建议吗?
让我们知道问题是否模糊不清,我会尝试更好地解释。
答案 0 :(得分:2)
PHPClasses上的evalMath parser结束提供了一个评估此类表达式的安全框架。
答案 1 :(得分:1)
我认为最合适的模式是Specification pattern。
在计算机编程中,规范模式是一种特定的软件设计模式,通过使用布尔逻辑将业务逻辑链接在一起,可以重新构建业务逻辑。
但是,这种方法需要您为用户提供的输入编写解析器,以便将条件安全地转换为规范实例。根据所允许的条件的复杂性,这可能不是一件容易的事。
你可以通过为断言创建带create_function
的lambda函数来实现同样的目的,但是当涉及用户输入时,这与使用eval
一样不安全。