0到字符串的比较失败

时间:2014-04-20 05:52:31

标签: php function methods

更新:0不是使用默认值,经过测试后,答案建议失败的条件。

function test($value='A') {
   if ($value != 'A') {
     echo 'OK';
   }
   else {
     echo 'NOT OK';
   }
}

test(); // Outputs NOT OK
test('A'); // Outputs NOT OK
test(0); // Outputs NOT OK, Should output OK?
test('0'); // Outputs OK
test(null); // Outputs OK
test(false); // Outputs OK

这是抛出我的一个功能。我很惊讶地看到只有0这样做并且null工作正常。有谁知道为什么PHP将0解释为默认值?

3 个答案:

答案 0 :(得分:3)

在PHP中,将字符串'A'与数字0进行比较会导致将字符串更改为数字。在这种情况下,'A'会转换为0,当然0 == 0

有关详细信息,请参阅here

为了完整性,修复程序来自相同的链接文档

  

使用严格的比较运算符(===,!==)   比较运算符

答案 1 :(得分:1)

将测试更改为:

if ($value !== 'A') {

当您使用==!=来比较数字和字符串时,它会将字符串强制转换为数字。字符串'A'会转换为0,因此它们相等。

答案 2 :(得分:1)

当您使用松散比较运算符时,PHP会尝试将0隐式转换为字符串。使用!==进行严格比较。

<强> DEMO