function isEval()
{
foreach(array_reverse(debug_backtrace()) as $v) {
return $v['function'] === 'eval';
}
}
function isEval() { // updated by code90
foreach(array_reverse(debug_backtrace()) as $v) {
if($v['function'] === 'eval') return true;
}
return false; }
function myFunc()
{
return isEval() ? "is eval\n" : "is not eval\n";
}
function callAnotherFunction()
{
return myFunc();
}
function myFunctionWithEval()
{
eval('$return = myFunc();');
return $return;
}
測試
echo "myFunc() without eval: " . myFunc();
eval("echo 'myFunc() whit eval: ' . myFunc();");
echo "callAnotherFunction() without eval: " . callAnotherFunction();
eval("echo 'callAnotherFunction() with eval: ' . callAnotherFunction();");
echo 'myFunctionWithEval() with eval: ' . myFunctionWithEval();
輸出
myFunc() without eval: is not eval
myFunc() whit eval: is eval
callAnotherFunction() without eval: is not eval
callAnotherFunction() with eval: is eval
myFunctionWithEval() with eval: is not eval <--- PROBLEM!
myFunctionWithEval調用myFunc的與EVAL。您無法保證它何時被稱爲eval。可以給誤報。
你應該考慮另一種方式來繼續。這種方法應該不能使用!
的替代,但我總是建議不使用:
function isEval()
{
return isset($GLOBALS['__MyEval']) && $GLOBALS['__MyEval'] === true;
}
function myFunc()
{
return isEval() ? "is eval\n" : "is not eval\n";
}
function myFunctionWithEval()
{
$GLOBALS['__MyEval'] = true;
eval('$return = myFunc();');
$GLOBALS['__MyEval'] = null;
return $return;
}
echo "myFunctionWithEval() with eval: " . myFunctionWithEval();
我認爲它最容易傳遞一個參數:'功能的GetName($格式)' – 2012-07-18 08:32:52
如果你給的大局觀,我很確定有一種方法可以避免函數返回兩個不同的值,並且完全使用eval。 – JJJ 2012-07-18 08:34:23
我不確定,但我確信你不應該使用'eval()'。 – Leri 2012-07-18 08:34:29