在PHP中,可以使用單引號或是雙引號來定義一個字串。在平常的使用中並沒有細分這兩種符號定義的字串有什麼區別。今天寫了幾行代碼作為講“傳址賦值”的樣本,在這段代碼中同時使用了單引號和雙引號定義字串(請注意下面程式碼片段中的第四行和第六行),執行過後卻發生了奇妙的事情。
$var1 = "Chris Mao"; //Assign the value "Chirs Mao" to $var1
$var2 = &$var1; //Reference $var1 via $var2
echo '<b>The value of $var2 is: </b>', $var2, "<br>"; //$var2 and $var1 have the same value "Chris Mao"
$var2 = 'my name is $var2'
; //Modify $var2, the sametime $var1 was modified
echo '<b>The value of $var1 is: </b>', $var1, "<br>"; //The value of $var1 is "my name is $var2"
$var2 = "my New name is $var1"
; //Modify $var2, the sametime $var1 was modified
echo '<b>The value of $var2 is: </b>', $var2, "<br>"; //The value of $var1 is "my New name is my name is $var2"
echo '<b>The value of $var1 is: </b>', $var1, "<br>"; //The value of $var1 is "my New name is my name is $var2"
是執行結果的
不知大家看到這個結果有沒有發現什麼。在代碼的第四行和第六行的指派陳述式的右側字串中都出現了與程式碼片段中相同的變數名,只不過是一句用單引號,另一句用的是雙引號。在執行之前,預計的輸出應該是把變數名做為字串原樣輸出,而不是輸出變數值。但執行之後卻發現輸出與之前的預計是不同的。使用單引號的賦值是將字串中的變數名原樣輸出,而使用雙引號的指派陳述式則將變數名替換為此變數實際的值輸出。
重新翻書到講解字串變數的章節,細細地閱讀,赫然發現書中對這一現象早有描述:雙引號字串最重要的一點是其中的變數名會被變數值替代。都是看書不細惹的禍!