我有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是'不好'。特别是当您尝试运行用户输入时。
还有其他办法吗?我试图谷歌它,但它不是我的朋友一天;)
答案 0 :(得分: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
}
答案 1 :(得分:2)
eval
是邪恶的。不,没有其他(简单)解决方案,但也许这有助于:
if ($equation == "==") {
if ($left_side == $right_side) {
// ... your code goes here.
} else {
// Do some other stuff.
}
}
答案 2 :(得分:2)
您可以使用switch:
$left_side = "'Username'";
$equation = "doublequal";
$right_side = "'Username'";
switch($equation){
case 'doublequal':
if ($left_side == $right_side) {
// code
}
break;
//......
}
您不应该使用eval()
,特别是用户输入。
答案 3 :(得分:0)
eval()是邪恶的,但call_user_func()也是邪恶的,每个框架都在一个地方或另一个地方使用这个功能。
工具不是邪恶的。它们只是工具。邪恶就是我们使用它们的方式。
正如本叔叔所说:伟大的权力涉及很大的责任:)
答案 4 :(得分:-2)
我发现了这个伎俩
http://gonzalo123.com/2012/03/12/how-to-use-eval-without-using-eval-in-php/
这个想法是用PHP源代码创建一个临时文件,用标准PHP的include函数包含这个文件并销毁临时文件。