更新: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解释为默认值?
答案 0 :(得分:3)
在PHP中,将字符串'A'
与数字0
进行比较会导致将字符串更改为数字。在这种情况下,'A'
会转换为0
,当然0 == 0
。
有关详细信息,请参阅here。
为了完整性,修复程序来自相同的链接文档
使用严格的比较运算符(===,!==) 比较运算符
答案 1 :(得分:1)
将测试更改为:
if ($value !== 'A') {
当您使用==
或!=
来比较数字和字符串时,它会将字符串强制转换为数字。字符串'A'
会转换为0
,因此它们相等。
答案 2 :(得分:1)
当您使用松散比较运算符时,PHP会尝试将0隐式转换为字符串。使用!==
进行严格比较。
<强> DEMO 强>