2012-01-06 228 views
3
$a = '86'; 
var_dump($a); //ouput string(2) "86" 
var_dump($a['wtf']); //output string(1) "8" 

第二oputput奇怪儘管這是相當於在PHP奇怪的輸出

var_dump($a[0]); ////output string(1) "8" 

有人可以解釋我爲什麼的var_dump($ A [ 'WTF']);輸出字符串(1)「8」?

回答

7

$ a是一個字符串。
在php中的字符串可以看作是一個字符數組(如此$ a [0] =='8'和$ a [1] =='6')
現在,您試圖訪問字符串的地方['wtf'],因爲PHP期望有一個數字,它會嘗試將'wtf'轉換爲數字。由於在此字符串沒有數字,它被視爲0。

「wtf1」被轉換爲0,因爲它檢查第一字符(感謝悲傷BUBE)
「1wtf」轉換爲1
' 100' 轉換爲100
‘dfsdgrgergregr’轉換爲0

+0

當我看到它時,我以爲它將'wtf'計數爲3(3個字節的數據),並且由於$ a中沒有第3個字節,它會開始並輸出8 – 2012-01-06 07:29:37

+4

yes,php就像聖經一樣,你可以用很多方式解釋結果:-D – 2012-01-06 07:31:44

+1

'wtf1'== 0,而不是1,不像'1wtf'。轉換停在第一個非數字字符處。 – 2012-01-06 07:32:54

0

可能它會將'wtf'字符串轉換爲整數0 ...或其他相關內容。但爲什麼你必須使用$ a ['wtf']?

+1

只是嘗試......它不需要任何項目...... – roshanbh 2012-01-06 07:42:32

+0

好的我的回答是正確的。 PHP隱式地將字符串轉換爲整數值 – robob 2012-01-06 08:24:27

1

PHP有弱類型,也就是說,如果你通過它期待一個整數的字符串,它會透明地將其轉換爲整數,它在大多數情況下,是好的,因爲它允許更簡潔的代碼。但是,當然,它也允許有更多的錯誤。

這可能是(可能)原因,爲什麼添加和連接是由不同的操作符完成的(+會將兩個操作數轉換爲數字,.會將兩者都轉換爲字符串)。

正如之前指出的那樣,您試圖訪問字符串索引,該索引只能是整數,因此'wtf'已正確轉換爲0並返回第一個字母。如果你通過了,比如'1o1wut',它將被轉換爲1

+0

小心o,在某些組合中它將被視爲Octate/base 8數字 – 2012-01-06 07:46:53