在PHP中,可以使用單引號或是雙引號來定義一個字串。在平常的使用中並沒有細分這兩個符號定義的字串有什麼不同。今天寫了幾行程式碼作為講「傳址賦值」的範例,在這段程式碼中同時使用了單引號和雙引號定義字串(請注意下面程式碼段中的第四行和第六行),執行過後卻發生了奇妙的事。
$var1="ChrisMao";//Assignthevalue"ChirsMao"to$var1
$var2=&$var1;//Reference$var1via$var2
echo'Thevalueof$var2is:',$var2,"
' ;//$var2and$var1havethesamevalue"ChrisMao"
$var2='mynameis$var2';//Modify$var2,thesametime$var1wasmodifiedified
echo'Thevalueof$var1is:',$
echo'
Thevalueof$var1is:
',$echo' $var1is"mynameis$var2"
$var2="myNewnameis$var1";//Modify$var2,thesametime$var1wasmodified
echo'Thevalueof$var2is:',$var2,"
";/Thevaluevar2is:
"; myNewnameismynameis$var2"
echo'Thevalueof$var1is:',$var1,"
";//Thevalueof$var1is"myNewnameismynameis$var2"下圖是執行結果的截圖。看到這個結果有沒有發現什麼。在程式碼的第四行和第六行的賦值語句的右側字串中都出現了與程式碼段中相同的變數名,只不過是一句用單引號,另一句用的是雙引號。在執行之前,預期的輸出應該是把變數名做為字串原樣輸出,而不是輸出變數值。但執行後卻發現輸出與先前的預期是不同的。使用單引號的賦值是將字串中的變數名稱原樣輸出,而使用雙引號的賦值語句則將變數名稱替換為此變數實際的值輸出。 重新翻書到講解字串變數的章節,細細地閱讀,赫然發現書中對這現象早有描述:雙引號字串最重要的一點是其中的變數名稱會被變數值取代。都是看書不細惹的禍!