這個問題應該從PHP作為壹種動態腳本語言說起:
動態語言的變量類型隨著存儲的變量而變化,即變量類型根據具體環境而變化。
字符串“abc”從樓主的角度來看可能指的是確切的字符串,但是在PHP中存儲的時候是不確定的,因為它的功能會隨著語義的變化而變化。
第壹種情況是0:,PHP腳本將常數0翻譯成精確的整數。當大於字符串時,需要將字符串轉換成整數。PHP腳本會將字符串abc從十進制(默認)轉換為數字,但abc顯然不能表示十進制數字,即轉換失敗,所以PHP會將結果設置為0。如果字符串表示為“0xabc”,那麽PHP腳本可以找到0x標誌,將abc轉換為十六進制,這樣就可以得到abc標誌的十六進制整數。
如果樓主學過C,可以做個簡單的對比:
C中的case必須是數值常量,不能是字符串,因為C是由變量類型決定的,運行時不能隨意對確定的變量進行語義轉換。而PHP可以,因為PHP語言是動態的,變量類型是動態的。
或者借鑒PHP的例子:
如果壹個文件在文件中存儲了11111字符串(不是數字),然後直接從文件中讀取變量$a,下面的語法可以將$a計算為整數:
0+$a
上面表達的結果也可以看作是動態語言的壹種實現。