首頁 > 後端開發 > php教程 > php花括號常用規則詳解

php花括號常用規則詳解

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-25 09:04:15
原創
2004 人瀏覽過
  1. $a = 'flower';
  2. echo "She received some $as";
  3. // 無效;字母s會被當成有效​​的變數名稱組成元素,但這裡的變數是$a
  4. echo "She received some ${a}s"; // 有效
  5. echo "She received some {$a}s"; // 有效;建議的使用方法
複製程式碼

我們希望表達的是」她收到一些花“,語境中的flower應該採用複數形式(也就是說應該在後面加上S),但是如果不對變數做任何界定的話,就會出現第一個echo的情況。顯然我們希望輸出的是$a而不是$as。那我們通常是怎麼來處理這個輸出的呢?

  1. echo "She received some $a"."s";
  2. echo "She received some ".$a."s";
  3. // 這兩種習慣性的寫法應該沒有加花括號的寫法簡潔明了吧?
複製程式碼

注意:不管{是出現在$前面還是後面,只有兩者緊挨著時花括號才會被當成是界定符號。不要在之間加空格,不然就會被當作普通的花括號處理

  1. echo "She received some { $a}s";
  2. // 輸出的結果為:She received some { flower}s
// 輸出的結果為:She received some { flower}s
複製程式碼

2、複雜句法規則

(用花括號界定表達式等,使用與PHP4+):
  1. echo "有效的寫法: {$arr[4][3]}";
  2. // 有效;界定多維數組
  3. echocho "有效的寫法: {$arr['foo'][3]}";
  4. // 有效;當在字串中使用多維數組時,一定要用括號將它括起來
  5. echo "有效的寫法: {$this->width}00";
  6. // 有效;如果不界定的話,就會變成$this->width00
  7. echo "有效的寫法: {$this->value[ 3]->name}";
  8. // 有效;此範例示範了界定鍊式呼叫
  9. echo "有效的寫法: $name: {${$name}}";
  10. // 有效;此範例示範的效果實際上是一個可變變數
  11. echo "有效的寫法: {${getName()}}";
  12. // 有效;此範例示範了將函數的傳回值作為變數名
  13. echo "有效的下發: {${$this->getName()}}";
  14. // 有效;此範例示範了將函數的傳回值作為變數名稱
  15. 注意1: echo "這樣寫有效嗎: {getName()}";輸出結果為:'這樣寫有效嗎:
  16. {getName()}'。因為裡面不含$,所以花括號不會被當作界定符
  17. 注意2:echo "這樣寫有效嗎:{$arr[foo][3]}"; 在回答這個問題前我們先來進行一個實驗:
  18. error_reporting(E_ALL);
  19. $arr = array('a', 'b', 'c', 'd'=>'e');
  20. echo "This is $arr [d]";
  21. // 我們發現這樣寫是沒有問題的,那我們像下面這樣寫呢?
  22. echo $arr[d];
  23. 產生了這樣的錯誤:
  24. Notice: Use of undefined constant d - assumed 'd'
  25. 注意:採用了未定義的常數d,可能應該為'd'
  26. 那麼如果我們像下面這樣修改一下程式碼的話
  27. error_reporting(E_ALL);
  28. $arr = array('a', 'b', 'c', 'd'=>' e');
  29. define('f', 'd');
  30. echo $arr[f];
複製程式碼

這次沒有問題了。可以看出在字串中陣列的索引不加單引號是沒有問題的,但是如果這種寫法不是出現在字串當中就會報錯,而對於字串中{$arr[foo][3]}的解析就是按照非字串的方式解析的。所以說在字串當中對陣列只加花括號界定而不對索引加單引號的寫法是錯誤的。因為程式會把不加單引號的索引當作是常數來解析,這就產生了錯誤。正確的寫法應該是: echo "有效的寫法: {$arr['foo'][3]}"; 特別提醒一點:echo "This is $arr[d]";這種寫法雖然能夠被程式解析,但這也僅限於數組是一維數組的情況。嚴謹的寫法應該是:echo "This is {$arr['d']}";我的學生曾經在這一點上和我爭論過,他說:既然前面一種寫法能出結果,為什麼一定要用後面一種寫法呢?那麼,我們再繼續修改一下前面的程式碼
  1. error_reporting(E_ALL);
  2. $arr = array('a', 'b', 'c',
  3. 'd'= >array('e'=>'f')
  4. );
  5. echo "This is $arr[d][e]";
複製程式碼

這樣還能夠被正確解析嗎?我只想告訴你,加花括號是嚴謹的必要的。

注意3:

  1. error_reporting(E_ALL);
  2. $arr = array('a', 'b', 'c', 'd');
  3. echo "This is {$arr[2]}
  4. ";
  5. echo "This is {$arr['2']}
  6. ";
複製程式碼

執行以上程式碼,結果是一樣的,為什麼會這樣呢?因為PHP是弱型別語言。

  1. ----SQL語句
  2. //例一:
  3. $SQL1 = "select * from table where id={$_GET[ 'id']}";
  4. //例二:
  5. $SQL2 = "select * from table where id={$this->id}";
複製程式碼


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板