乳清這是否評價爲真?爲什麼這個評價爲真
<?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 />';
}
乳清這是否評價爲真?爲什麼這個評價爲真
<?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 />';
}
您正在比較字符串與整數。爲了進行比較,首先將字符串轉換爲整數。當'error123'
被轉換爲整數它變爲0。
echo intval("error123");
結果:
0
在PHP手冊有an explanation針對此行爲。
如果您將數字與字符串進行比較或者比較涉及數字字符串,則將每個字符串轉換爲數字,並以數字形式進行比較。
有一個快速參考頁PHP type comparison tables顯示各種比較的結果。請參閱表格「與==進行比較」。關於這個問題有趣的部分是0 == "php"
顯示爲TRUE。
type juggling也有一頁。該頁面上的一個user comment幾乎給出了與此相同的示例。
如果您不希望使用類型雜耍,請使用===
而不是==
。
試試這個:$val2==='error123'
這將評估價值和變量的類型。更多這裏:
http://us.php.net/manual/en/language.operators.comparison.php
是的。瘋了。 – eyelidlessness 2010-05-24 23:27:22
因此,如果他要採取其他方式,''error123'== $ val2',這會評估爲false? – Ponkadoodle 2010-05-24 23:30:25
@wallacoloo不,它也會評估爲真。如果其中一個操作數是一個數字,並且如果這些字符串是「數字」,則運算符==會強制進行數值計算。這確實是瘋了。 http://www.php.net/manual/en/language.operators.comparison.php – leonbloy 2010-05-24 23:38:45