2014-01-29 91 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 –