2

我有3个变量:

$left_side = "'Username'";
$equation = "==";
$right_side = "'Username'";

我想测试这些变量,因为它是这样的 if 语句:

if($left_side $equation $right_side) {
    // do something
} else {
    // do something else
}

我知道这有效:

if(eval("return ".$left_side." ".$equation." ".$right_side.";")) {
    // do something
} else {
    // do something else
}

我一直认为使用 eval 是“不好的”。特别是当您尝试运行用户输入时。

还有其他方法可以做到这一点吗?我试图用谷歌搜索它,但它不是我今天的朋友;)

4

5 回答 5

3

你可以这样做:

function testValues($val1, $equation, $val2) {
   $res = false;
   switch($equation) {
      case "==":
          $res = $val1 == $val2;
          break;
      case ">":
          $res = $val1 > $val2;
          break;
      //....
      default:
         throw new Exception("Unknown operator");
   }
   return $res;
}

而不是像这样使用它:

 if(testValues($left_side,$equation,$right_side)) {
     //do something
 } else {
    //do something
 }
于 2013-03-26T08:06:23.613 回答
2

你可以使用switch

$left_side = "'Username'";
$equation = "doublequal";
$right_side = "'Username'";

switch($equation){
    case 'doublequal':
        if ($left_side == $right_side) {
             // code
        }
    break;
    //......
}

您永远不应该eval()特别使用用户输入。

于 2013-03-26T08:02:40.777 回答
2

eval是邪恶的。不,没有其他(简单的)解决方案,但也许这个有帮助:

if ($equation == "==") {
    if ($left_side == $right_side) {
        // ... your code goes here.
    } else {
        // Do some other stuff.
    }
}
于 2013-03-26T08:02:07.487 回答
0

eval() 是邪恶的,但 call_user_func() 也是邪恶的,每个框架都在一个地方或另一个地方使用这个函数。

工具并不邪恶。它们只是工具。邪恶是我们使用它们的方式。

正如本叔叔所说:强大的力量意味着巨大的责任:)

于 2013-03-26T17:55:18.757 回答
-2

我发现了这个技巧

http://gonzalo123.com/2012/03/12/how-to-use-eval-without-using-eval-in-php/

这个想法是用 PHP 源代码创建一个临时文件,用标准 PHP 的包含函数包含这个文件并销毁临时文件。

于 2013-03-26T08:12:08.500 回答