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...