2010-05-24 92 views
1

乳清這是否評價爲真?爲什麼這個評價爲真

<?php 


$val2=0; 

//outputs that is an error123 
if($val2=='error123'){ 
    echo 'that is an error123<br />'; 
}else{ 
    echo 'that is not an error123<br />'; 
} 

回答

13

您正在比較字符串與整數。爲了進行比較,首先將字符串轉換爲整數。當'error123'被轉換爲整數它變爲0。

echo intval("error123"); 

結果:

0 

在PHP手冊有an explanation針對此行爲。

如果您將數字與字符串進行比較或者比較涉及數字字符串,則將每個字符串轉換爲數字,並以數字形式進行比較。

有一個快速參考頁PHP type comparison tables顯示各種比較的結果。請參閱表格「與==進行比較」。關於這個問題有趣的部分是0 == "php"顯示爲TRUE。

type juggling也有一頁。該頁面上的一個user comment幾乎給出了與此相同的示例。

如果您不希望使用類型雜耍,請使用===而不是==

+3

是的。瘋了。 – eyelidlessness 2010-05-24 23:27:22

+0

因此,如果他要採取其他方式,''error123'== $ val2',這會評估爲false? – Ponkadoodle 2010-05-24 23:30:25

+0

@wallacoloo不,它也會評估爲真。如果其中一個操作數是一個數字,並且如果這些字符串是「數字」,則運算符==會強制進行數值計算。這確實是瘋了。 http://www.php.net/manual/en/language.operators.comparison.php – leonbloy 2010-05-24 23:38:45

相關問題