我一直在做一个使用eval()函数的php测试,但似乎eval()无法正确调用用户定义的函数.
请看我的例子:
function equals($a,$b){
if ($t == $r){
return true;
}
else{
throw new Exception("expected:<".$r."> but was:<".$t.">");
}
}
eval("$test = 1;");
try{
echo eval("equals($test,1);");
}
catch (Exception $e) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
但我收到的总是像"预期的:<1>但是:<>",但是如果我做了
echo $test;
Run Code Online (Sandbox Code Playgroud)
我可以得到1.
我已经尝试通过遵循PHP eval()手册将$更改为\ $,但它似乎打破了eval函数.(http://php.net/manual/en/function.eval.php)
所以我现在有点堆叠,有人可以帮我解决这个问题.非常感谢你.
不要用eval().
如果要derp在运行时使用名称调用用户定义的函数,例如:
$functionName = 'derp';
$functionName(argument1, argument2, ...);
Run Code Online (Sandbox Code Playgroud)
注意我是如何functionName加上前缀的,$所以我不打电话functionName,而是derp.
因此,对于您的示例,调用用户定义的函数,equals:
$functionName = 'equals';
$functionName($test, 1);
Run Code Online (Sandbox Code Playgroud)
你失踪了return
echo eval("return equals(\"$test\",1);");
Run Code Online (Sandbox Code Playgroud)
来自 PHP 手册
除非在计算代码中调用 return,否则 eval() 返回 NULL,在这种情况下,将返回传递给 return 的值。如果计算的代码中存在解析错误,则 eval() 返回 FALSE 并且以下代码继续正常执行。
避免按照 @Delan 建议使用 eval() 。