把字串作為PHP程式碼執行

eval

(PHP 4, PHP 5, PHP 7, PHP 8)

eval把字串作為PHP程式碼執行

說明

eval(string $code): mixed

把字串 code 作為PHP程式碼執行。

警告

函式eval()語言結構是 非常危險的, 因為它允許執行任意 PHP 程式碼。 它這樣用是很危險的。 如果您仔細的確認過,除了使用此結構以外 別無方法, 請多加註意,不要允許傳入任何由使用者 提供的、未經完整驗證過的數據

參數

code

需要被執行的字串

程式碼不能包含打開/關閉 PHP tags。比如, 'echo "Hi!";' 不能這樣傳入: '<?php echo "Hi!"; ?>'。但仍然可以用合適的 PHP tag 來離開、重新進入 PHP 模式。比如 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'

除此之外,傳入的必須是有效的 PHP 程式碼。所有的語句必須以分號結尾。比如 'echo "Hi!"' 會導致一個 parse error,而 'echo "Hi!";' 則會正常執行。

return 語句會立即中止目前字串的執行。

程式碼執行的作用域是呼叫 eval() 處的作用域。因此,eval() 里任何的變數定義、修改,都會在函式結束后被保留。

返回值

eval() 返回 null,除非在執行的程式碼中 return 了一個值,函式返回傳遞給 return 的值。 PHP 7 開始,執行的程式碼里如果有一個 parse error,eval() 會拋出 ParseError 異常。在 PHP 7 之前, 如果在執行的程式碼中有 parse error,eval() 返回 false,之後的程式碼將正常執行。無法使用 set_error_handler() 捕獲 eval() 中的解析錯誤。

範例

示例 #1 eval() 例子 - 簡單的文字合併

<?php
$string 
'cup';
$name 'coffee';
$str 'This is a $string with my $name in it.';
echo 
$str"\n";
eval(
"\$str = \"$str\";");
echo 
$str"\n";
?>

以上例程會輸出:

This is a $string with my $name in it.
This is a cup with my coffee in it.

註釋

注意: 因為是一個語言構造器而不是一個函式,不能被 可變函式 或者 命名參數 呼叫。

小技巧

和直接將結果輸出到瀏覽器一樣,可使用輸出控制函式來捕獲目前函式的輸出,然後(例如)儲存到一個 string 中。

注意:

如果在執行的程式碼中產生了一個致命的錯誤(fatal error),整個指令碼會退出。

參見

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *