如果逻辑(谓词表达)在变量中

时间:2019-07-05 12:56:30

标签: php if-statement conditional-statements

我将比较运算符作为变量传递给PHP Cli:

./test.php -k "command" -c ">0"

-k中的命令产生结果,并且我将其存储在$ result中

我遇到的问题是我想将逻辑和比较运算符作为变量传递,这可能吗?

$result = 2;
$logic = ' >0';

if ( $result $logic ) echo "true"; 

但是我得到了

  

PHP解析错误:语法错误,意外的'$ logic'(T_VARIABLE)

有什么想法吗?

3 个答案:

答案 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);