轉自http://www.cnblogs.com/jayleke/archive/2011/11/08/2241609.htmlhtml
1.簡單句法規則(用花括號界定變量名,適用於PHP全部版本): $a = 'flower'; echo "She received some $as"; // 無效;字母s會被當成有效的變量名組成元素,可是這裏的變量是$a echo "She received some ${a}s"; // 有效 echo "She received some {$a}s"; // 有效;推薦的使用方法 咱們但願表達的是」她收到一些花「,語境中的flower應該採用複數形式(也就是說應該在後面加上S),可是若是不對變量作任何界定的話,就會出現第一個echo的狀況。顯然咱們但願輸出的是$a而不是$as。那麼咱們一般是怎麼來處理這個輸出的呢? echo "She received some $a"."s"; echo "She received some ".$a."s"; // 這兩種習慣性的寫法應該沒有加花括號的寫法簡潔明瞭吧? 注意:無論{是出如今$前面仍是後面,只有二者緊挨着時花括號纔會被當成是界定符號。不要在之間加空格,要否則就會被看成普通的花括號處理 echo "She received some { $a}s"; // 輸出的結果爲:She received some { flower}s數組
2.複雜句法規則(用花括號界定表達式等,使用與PHP4+): echo "有效的寫法: {$arr[4][3]}"; // 有效;界定多維數組 echo "有效的寫法: {$arr['foo'][3]}"; // 有效;當在字符串中使用多維數組時,必定要用括號將它括起來 echo "有效的寫法: {$this->width}00"; // 有效;若是不界定的話,就會變成 $this->width00 echo "有效的寫法: {$this->value[3]->name}"; // 有效;該例演示了界定鏈式調用 echo "有效的寫法: $name: {${$name}}"; // 有效;該例演示的效果其實是一個可變變量 echo "有效的寫法: {${getName()}}"; // 有效;該例演示了將函數的返回值做爲變量名 echo "有效的下發: {${$this->getName()}}"; // 有效;該例演示了將函數的返回值做爲變量名 注意1:echo "這樣寫有效嗎: {getName()}";輸出結果爲:'這樣寫有效嗎: {getName()}'。由於裏面不含$,因此花括號不會被看成界定符 注意2:echo "這樣寫有效嗎:{$arr[foo][3]}"; 在回答這個問題前咱們先來進行一個實驗: error_reporting(E_ALL); $arr = array('a', 'b', 'c', 'd'=>'e'); echo "This is $arr[d]"; // 咱們發現這樣寫是沒有問題的,那麼咱們像下面這樣寫呢? echo $arr[d]; 產生了這樣的錯誤: Notice: Use of undefined constant d - assumed 'd' 注意:採用了未定義的常量d,可能應該爲'd' 那麼若是咱們像下面這樣修改一下代碼的話 error_reporting(E_ALL); $arr = array('a', 'b', 'c', 'd'=>'e'); define('f', 'd'); echo $arr[f]; 咱們發現此次沒有問題了。能夠看出在字符串中數組的索引不加單引號是沒有問題的,可是若是這種寫法不是出如今字符串當中就會報錯,而對於字符串中{$arr[foo][3]}的解析就是按照非字符串的方式解析的。因此說在字符串當中對數組只加花括號界定而不對索引加單引號的寫法是錯誤的。由於程序會把不加單引號的索引看成是常量來進行解析,這就產生了錯誤。正確的寫法應該是: echo "有效的寫法: {$arr['foo'][3]}"; 特別提醒一點:echo "This is $arr[d]";這種寫法雖然可以被程序解析,但這也僅限於數組是一維數組的狀況。嚴謹的寫法應該是:echo "This is {$arr['d']}";個人學生曾經在這一點上和我爭論過,他說:既然前面一種寫法能出結果,爲何必定要用後面一種寫法呢?那麼,咱們再繼續修改一下前面的代碼 error_reporting(E_ALL); $arr = array('a', 'b', 'c', 'd'=>array('e'=>'f') ); echo "This is $arr[d][e]"; 這樣還可以被正確解析嗎?我只想告訴你,加花括號是嚴謹的必要的。函數
注意3: error_reporting(E_ALL); $arr = array('a', 'b', 'c', 'd'); echo "This is {$arr[2]} "; echo "This is {$arr['2']} "; 執行上面的代碼。結果是同樣的,爲何會這樣呢?我只能告訴你PHP是弱類型語言,至於什麼叫弱類型語言我就不在這裏多說了。本身去Google一下吧。說了這麼多,那麼最能體現這些句法規則優點的具體應用在什麼地方呢?----SQL語句 // 示例一: $SQL1 = "select * from table where id={$_GET['id']}"; // 示例二: $SQL2 = "select * from table where id={$this->id}";this