Php 操作员不工作

Php 操作员不工作,php,Php,字符串中有一个运算符 $c['operator'] = ">="; if($sub_total.$c['operator'].$c['value']) { echo $sub_total.$c['operator'].$c['value']; } 它获得的输出是20610>=30000字符串不能被解释为php代码,除非您使用它时要小心 在if语句的示例中,您所做的是连接字符串,因为连接后的字符串不是null,所以它的计

字符串中有一个运算符

 $c['operator'] = ">=";

        if($sub_total.$c['operator'].$c['value'])
        {
        echo $sub_total.$c['operator'].$c['value'];

        }

它获得的输出是20610>=30000

字符串不能被解释为php代码,除非您使用它时要小心

在if语句的示例中,您所做的是连接字符串,因为连接后的字符串不是null,所以它的计算结果为true,所以执行if语句

在您的案例中,解决方案是查看使用哪个操作符,就像@adam在其解决方案中所写的那样

顺便说一句,在字符串中包含逻辑,可能在脚本之外不是一个好主意。

$sub_total.$c['operator'].$c['value']不是一个比较,而是一个字符串连接。在PHP中,填充字符串始终为true,因此if语句始终为true。

用于计算所构造的代码

$c['operator'] = ">=";

if(eval($sub_total.$c['operator'].$c['value']))
{
    echo $sub_total.$c['operator'].$c['value'];          
} 

我会把可能的操作员放在一个开关中:


这比使用eval安全得多,还有一个额外的好处,那就是它可以清理输入。

在PHP中不能这样做,应该执行以下操作:

if ($c['operator'] == '>=' and $sub_total >= $c['value']) {
    // Do something
} else if ($c['operator'] == '<=' and $sub_total <= $c['value']) {
    // Do something else
} // etc...

看看eval方法。不过这很危险


您希望它对表达式求值吗?这只是一根绳子,不应该起作用。想象一下,如果它这样做会导致所有的安全问题。是的,我希望它会评估表达式。能否请您提供更多有关您试图实现的目标的详细信息?我假设@PradeepSingh正在构建一个可用于筛选数据集的表单。例如,用户可以输入一个字段名、一个运算符和一个值,这与Google Analytics report filters中的非常相似。那是错误的。事实上,几年前,使用@feeela将字符串作为PHP代码进行求值是很常见的。第二段是这样说的。事实上,你是对的。我会编辑question.eval不安全,特别是在用户生成的输入中,你不能在PHP中这样做。有没有这样的构造可以提供所需结果的语言?是的,但我不知道地球上所有的语言,所以可能在某个奇怪的地方创建了这样的语言。仅供参考,有类似的事情,例如变量函数名$result和变量变量$$result,但在这种情况下两者都不适用。@adam:是的,我知道,虽然我发现$func非常有用,$$var在我看来已经够奇怪的了,特别没用了,但我不能说我用过它!我想@feeela可能会觉得很有趣。
if ($c['operator'] == '>=' and $sub_total >= $c['value']) {
    // Do something
} else if ($c['operator'] == '<=' and $sub_total <= $c['value']) {
    // Do something else
} // etc...