2014-01-29 46 views
-1

誰能解釋爲什麼發生這種情況時,怪異的行爲比較

<?php 
if (0 == 'fasas')// or if ('fasas' == 0) 
{ 
    exit('if condition success'); 
} 
exit; 

輸出if condition success

我在這裏檢查字符串等同於零,它總是成功,我可以」 t瞭解此行爲

回答

1

請參閱string conversion to numbers in PHP

該值由字符串的起始部分給出。如果字符串 以有效數字數據開頭,則這將是使用的值。 否則,該值將爲0(零)。

所以:

if ('fasas' == 0) { 
    echo 'This is true, fasas has no numbers so it is converted to 0'; 
} 

if ('0fasas' == 0) { 
    echo 'This is true also, 0fasas is converted to 0'; 
} 

if ('1fasas' == 0) { 
    echo 'This is false, 1fasas is converted to 1'; 
} 
+0

偉大的工作thanx這就是我一直在尋找 –

0

您必須使用===這是一個嚴格的比較意味着價值和類型正在被比較。

僅使用==並不嚴格,這意味着將字符串與0進行比較也是正確的。

if ('fasas' === 0) 
{ 
    exit('if condition success'); 
} 
exit; 

您還可以使用strcmp(),這是一個安全的二進制比較。

This is an interesting blog about it

希望這會有所幫助!

+0

我知道,但我的問題是'如果( '' == 0){ 退出 ( '如果條件成功'); } exit;'如果條件成功,將會輸出' –

+0

if('any string'== 0)will always be be true。如果('任何字符串'=== 0)將始終爲假,即使('0'=== 0) – Yani

+0

我知道,但通常當我們比較它應該檢查等效,這是許多框架的作用thanx –