eval將值代入字串之中。
語法: void eval(string code_str);
傳回值: 無
函式種類: 資料處理
內容說明
本函式可將字串之中的變數值代入,通常用在處理資料庫的資料上。參數 code_str 為欲處理的字串。值得注意的是待處理的字串要符合 PHP 的字串格式,同時在結尾處要有分號。使用本函式處理後的字串會沿續到 PHP 程式結束。
使用範例
<?php
$string = '杯子';
$name = '咖啡';
$str = '這個 $string 中裝有 $name.<br>';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>
本例的傳回值為
引用:
這個 $string 中裝有 $name.
這個 杯子 中裝有 咖啡.
eval 與 脫逃字元
eval可以拿來執行一個命令,不過他最常用的是拿來作兩次變數的代換, 主要是每次執行一個shell 命令他會先evaluate一次,看到有$這個東西的就把值換一次把變數換掉, 然後再執行一遍。這種double scan的方法對一些變數代換很有用, 因為eval不是喚起另一個shell來執行,而是在本來這個shell內多evaluate一次, 所以代換結果可以保留下來。 例如如果我們要兩次代換
count=1
var1=I
var2=am
var3=a
var4=gyoza
while [ $count -lt 5 ]; do
eval "echo \$var$count"
let 'count=count + 1'
done
count可以一直變化1. 2. 3 ....要產生一個新變數var1 var2 var3....然後再對 var1 var2取值。其中因為第一個var不想被運算,所以先用escape字元\, 然後第二次運算時才被解釋。 那如果要三次以上變數代換在一行內解決呢? 想想看吧。
eval主要還用來evaluate執行一個shell script檔,可以像C一樣寫成很多的 模組shell script在同一個shell下run,則變數在此shell內通通有效。
$ eval ". foo.sh"
不過如果變數太多,名字會打架。