我将比较运算符作为变量传递给PHP Cli:
./test.php -k "command" -c ">0"
-k中的命令产生结果,并且我将其存储在$ result中
我遇到的问题是我想将逻辑和比较运算符作为变量传递,这可能吗?
$result = 2;
$logic = ' >0';
if ( $result $logic ) echo "true";
但是我得到了
PHP解析错误:语法错误,意外的'$ logic'(T_VARIABLE)
有什么想法吗?
答案 0 :(得分:2)
不可能那样做,但是可以使用eval方法来做到这一点,
$result = 2;
$logic = ' >0';
eval('$logicResult = ' . $result . $logic .';');
if ( $logicResult ) echo "true";
不推荐使用eval
方法,因为它可能会在您的应用中引入安全漏洞。
答案 1 :(得分:2)
虽然eval
可以做到,但通常认为这是有害的。
如果$logic
中可能的运算符实例的范围有限,则在以下情况下最好使用switch语句或级联:
$result = 2;
$logic = trim(' <0');
$op2 = substr($logic, 0, 2);
$op1 = substr($logic, 0, 1);
if ( $op2 == '>=') {
$operand = substr($logic, 2);
if ($result >= (int)$operand) { echo "true"; }
} elseif ( $op1 == '>' ) {
$operand = substr($logic, 1);
if ($result > (int)$operand) { echo "true"; }
} elseif ( $op1 == '=' ) {
$operand = substr($logic, 1);
if ($result == (int)$operand) { echo "true"; }
} elseif ( $op2 == '<=') {
$operand = substr($logic, 2);
if ($result <= (int)$operand) { echo "true"; }
} elseif ( $op1 == '<' ) {
$operand = substr($logic, 1);
if ($result < (int)$operand) { echo "true"; }
} else {
echo "operator unknown: '$logic'";
}
答案 2 :(得分:1)
作为@treyBake通知,您可以使用eval()-将字符串评估为PHP代码:
<?php
$result = 2;
$logic = 'if(' . $result . '>0){echo "true";};';
eval($logic);