2014-05-07 42 views
0

我學習PHP和我剛剛看了一下賦值運算符和我看到這個 $a .= 5這意味着$ a等於$同5級聯爲了測試這一點,我編寫了一個簡單的腳本級聯賦值在PHP

<?php 
     $a = 12345; 
     $a .=6; 

     $b = 12345; 
     $b .=006; 

     $c = 12345; 
     $c .=678; 
     echo " a=$a and b=$b c=$c" ; 

    ?> 

輸出是a=123456 and b=123456 c=12345678。我的問題是爲什麼b不等於12345006?是因爲對待6 == 006嗎?

回答

3

因爲具有前導零的數字被視爲八進制數。如果連接會包含前導零,那麼006將被解釋爲一個字符串,這是沒有意義的,因爲它沒有引用它。
如果您希望006被視爲字符串,請將它寫爲一個:'006'。保留原樣,並將其解釋爲八進制:

$b = $a = 123; 
$a .= 8; 
$b .= 010;//octal 
echo $a, ' === ', $b, '!';//echoes 1238 === 1238! 

就像是一個幫助:是的,那些是逗號的。 echo是一種語言構造,您可以推送多個值,並用逗號分隔。使用逗號的結果是在將數據推送到輸出流之前,這些值不會串聯成單個字符串。
這意味着它(稍快)。缺點:沒有任何AFAIK。

如果你有興趣在PHP,I've explain this a bit more detailed here的內部...

+0

@ Nat95:謝謝,如果你有興趣,我已經在這個主題上增加了一些細節,一些關於PHP內部結構的詳細信息 –

+0

+1,以獲得詳細且詳細解釋的答案。另外,我昨天正在尋找那個關於'0'被視爲八進制數的術語。我將不得不記住一個來自人類的短篇記憶,我的短期記憶是完全被擊中的! –

+0

@ Fred-ii-:我把它說成_「hereon」_,因爲_「我」_ +聲明_「我的短時記憶被拍攝」_暗示着一些嚴重的物質濫用:-P –

5

由於006被視爲八進制數6,它被轉換爲字符串「6」,並連接到「12345」(這是數字12345轉換爲字符串)。 使用$ b。=「006」,結果將爲12345006.

+0

則輸出將是一個字符串? – yaylitzis

+1

是的,結果。或。=運算符總是一個字符串。 –

+1

@ Nat95,你可以將'cast'轉換爲像這樣的整數。'$ b =(int)$ b;' –

0

剛剛嘗試B中的字符串:

$b.= '006'; 

然後你會得到輸出12345006.