Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php '的替代方案;评估';状况_Php_Eval - Fatal编程技术网

Php '的替代方案;评估';状况

Php '的替代方案;评估';状况,php,eval,Php,Eval,在我正在处理的遗留代码库中,有一个条件计算器,它接受用户输入来构建条件。然后在运行时使用php eval()对该条件进行评估。不使用eval解决此问题的最佳方法是什么 例如,我有一个用户在UI中输入的条件“1>0”。必须对此进行评估,并返回结果(在本例中为true)。有什么建议吗 如果问题看起来很模糊,我会尝试更好地解释。over-on-PHPClasses为评估这种类型的表达式提供了一个安全的框架。我想说最适合这种类型的模式是 在计算机编程中,规范模式是一种特殊的软件设计模式,通过使用布尔逻辑

在我正在处理的遗留代码库中,有一个条件计算器,它接受用户输入来构建条件。然后在运行时使用php eval()对该条件进行评估。不使用eval解决此问题的最佳方法是什么

例如,我有一个用户在UI中输入的条件“1>0”。必须对此进行评估,并返回结果(在本例中为true)。有什么建议吗


如果问题看起来很模糊,我会尝试更好地解释。

over-on-PHPClasses为评估这种类型的表达式提供了一个安全的框架。

我想说最适合这种类型的模式是

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

但是,这种方法需要为用户提供的输入编写解析器,以便将条件安全地转换为规范实例。根据允许条件的复杂性,这可能不是一项容易的任务


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

+1。我要试试看。。你知道如果我将php函数传递给解析器会发生什么吗?如果你特别需要php函数(例如字符串操作或其他),而不是简单的数学函数,那么将这些函数添加到内置函数listgreat中就很容易了。。似乎可以。。。将尝试一下,看看它能带来什么。。。感谢您的快速回复。这对条件运算符不起作用。。似乎只会评估数学运算。。有什么想法吗?在nfx()方法中将条件运算符添加到$ops、$ops_r和$ops_p数组中,然后扩展if的逻辑(在数组中($token,array(“+”,“-”,“*”,“/”,“^”){test in the pfx()方法来执行适当的比较,并将结果推回到堆栈上……这非常简单,尽管您可能需要调整nfx()方法逻辑,用于测试>=等运算符,它们是2个字符,而不是1。您可以创建自己的标记器,或者从PHP的内置标记器开始,如果您的条件的语法非常相似:+1似乎很有趣,不确定我是否可以使用它,因为这可能需要进行重大更改…无论如何,感谢您的回答,我将继续然后看看它会把我们引向何方。。