爲什麼下面的代碼無法編譯:爲什麼我不能以這種方式調用eval()?
<?php
$str = "echo \"ok\"";
$func = "eval";
$func ($str);
?>
和PHP告訴我的eval是不確定的。
爲什麼下面的代碼無法編譯:爲什麼我不能以這種方式調用eval()?
<?php
$str = "echo \"ok\"";
$func = "eval";
$func ($str);
?>
和PHP告訴我的eval是不確定的。
在PHP中,eval
是一個「語言結構」,而不是一個函數。 (注意它在語法高亮編輯器中轉換關鍵字顏色。)不能使用變量函數語法$func()
來調用語言結構,或者與其他函數特定的東西(如is_callable()
)一起使用語言結構。
從http://www.php.net/manual/en/functions.variable-functions.php:
變量函數將不與語言結構如回聲,打印,未設置(),isset(工作),空(),包括,需要等。利用包裝函數將任何這些結構用作可變函數。
eval
不是一個函數,它的語言結構和變量函數不能用於語言結構。
你有Wrong..the代碼,也許像例如..
<?php
$eval_code = '$my_name = "Swashata";' .
'$your_name = "John";' .
'return $your_name;' .
'echo $my_name;';
$the_name = eval($eval_code);
echo '<p>$the_name has got a value ' . $the_name . '</p>';
?>
所以......你的代碼有什麼重大區別? OP的代碼有什麼問題?它爲什麼會失敗? –
eval()
不能使用變量函數調用。如果你不明白variable function是什麼?看看你的代碼的以下部分
$func = "eval";
$func ($str); //Here $func becomes eval upon execution making it a variable function
如果你看一下手動參考,它清楚地noted
注:由於這是一個語言結構,而不是一個功能,它可以不使用所謂的可變函數。
你在評估嗎?真? –
因爲'eval'實際上不是一個函數,所以它是一個語言結構:*「注意:因爲這是一個語言結構而不是一個函數,所以不能使用變量函數調用它。」* http://php.net/manual /en/function.eval.php'<-'(它寫在文檔中)。 –
@Asad感謝starx的回答,我終於知道「evaling eval」在你的評論中意味着什麼; -P正確,那就是我在做的 – daisy