在PHP eval()中调用用户定义的函数

wgx*_*731 2 php eval

我一直在做一个使用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)

所以我现在有点堆叠,有人可以帮我解决这个问题.非常感谢你.

Del*_*ani 6

不要用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)


Sha*_*ngh 5

你失踪了return

echo eval("return equals(\"$test\",1);");
Run Code Online (Sandbox Code Playgroud)

来自 PHP 手册

除非在计算代码中调用 return,否则 eval() 返回 NULL,在这种情况下,将返回传递给 return 的值。如果计算的代码中存在解析错误,则 eval() 返回 FALSE 并且以下代码继续正常执行。

评估()

避免按照 @Delan 建议使用 eval() 。