2017-07-16 63 views
1

爲什麼下面的代碼觸發第一種情況,而不是實際匹配的那種。爲什麼PHP將int 0識別爲switch語句中的第一個case?

switch (0) { 
    case 'test': 
     echo 1; 
     break; 
    case 0: 
     echo 2; 
} 

結果:1

這似乎是一些與0。如果我嘗試switch(1)我得到什麼,以及switch(2)將觸發case 0預計。

這是在Mac和Debian上的PHP 7。

+0

你爲什麼'開關(0)'首先做什麼?但'switch'使用寬鬆比較,並且'0' =='test'寬鬆輸入 –

+0

這就是示例代碼。我的實際代碼比這個更復雜,但是當我的開關輸入碰巧是0時,我發現它是一個0 – DAB

回答

2

您正在比較整數與字符串。這不能完成,所以PHP做了一個隱式類型轉換。

PHP將轉換爲整數並轉換爲'test'

(int)'test'0。因此第一條語句匹配。

這有可能會更加古怪:

switch (1) { 
    case '1test': 
    // would also match 
    break; 
} 
+0

啊,我想我把它當一個字符串轉換爲一個布爾型時感到困惑,其中「test」爲true,0爲false。這是有道理的。謝謝! – DAB

相關問題