(PHP 4, PHP 5, PHP 7, PHP 8)
eval — 把字符串作為PHP代碼執行
把字符串 code
作為PHP代碼執行。
函數eval()語(yǔ)言結構是 非常危險的, 因為它允許執行任意 PHP 代碼。 它這樣用是很危險的。 如果您仔細的確認過(guò),除了使用此結構以外 別無(wú)方法, 請多加注意,不要允許傳入任何由用戶(hù) 提供的、未經(jīng)完整驗證過(guò)的數據 。
code
需要被執行的字符串
代碼不能包含打開(kāi)/關(guān)閉
PHP tags。比如,
'echo "Hi!";'
不能這樣傳入:
'<?php echo "Hi!"; ?>'
。但仍然可以用合適的 PHP tag 來(lái)離開(kāi)、重新進(jìn)入 PHP 模式。比如
'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'
。
除此之外,傳入的必須是有效的 PHP 代碼。所有的語(yǔ)句必須以分號結尾。比如
'echo "Hi!"'
會(huì )導致一個(gè) parse error,而
'echo "Hi!";'
則會(huì )正常運行。
return
語(yǔ)句會(huì )立即中止當前字符串的執行。
代碼執行的作用域是調用 eval() 處的作用域。因此,eval() 里任何的變量定義、修改,都會(huì )在函數結束后被保留。
eval() 返回 null
,除非在執行的代碼中 return
了一個(gè)值,函數返回傳遞給 return
的值。 PHP 7 開(kāi)始,執行的代碼里如果有一個(gè) parse error,eval() 會(huì )拋出 ParseError 異常。在 PHP 7 之前,
如果在執行的代碼中有 parse error,eval() 返回
false
,之后的代碼將正常執行。無(wú)法使用 set_error_handler() 捕獲 eval() 中的解析錯誤。
示例 #1 eval() 例子 - 簡(jiǎn)單的文本合并
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
以上例程會(huì )輸出:
This is a $string with my $name in it. This is a cup with my coffee in it.