發新話題

eval 與 跳脫字元

eval 與 跳脫字元

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"

不過如果變數太多,名字會打架。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。