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}";