PHP认为P == 0

时间:2013-01-23 18:35:51

标签: php types conditional

绝对精神错乱。我今天正在测试一个post变量,它应该总是评估为一个字符。示例代码是......

if($_POST['status'] == '' || $_POST['status'] == 0){ die('oh no!'); }

如果我传递P的状态,它正在执行die语句。然后我用以下代码创建了一个PHP文件......

echo 'P1: '.intval($_POST['status']=='').'<br />';
echo 'P2: '.intval($_POST['status']==0).'<br />';
echo 'P3: '.intval('P'==0).'<br />';
猜猜是什么? P2&amp; P3都评估为TRUE。 intval只是在P1上显示0而不是什么。

这是PHP的已知错误吗?这只是在我正在运行的版本上被打破的东西吗?坦率地说,我完全不知道为什么会这样做。它使用三等于正确评估,但不是双倍。在我的书中P绝对不等于...

2 个答案:

答案 0 :(得分:10)

来自PHP documentation

  

如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。

答案 1 :(得分:1)

使用==比较字符串和数字时,PHP会将该字符串转换为数字。

字符串'P'中没有任何数字字符。因此,PHP 将其评估为数字0。最后0 == 0发生,true

另一方面,如果你使用三等于(===),那就提到了转换 没有发生。 PHP期望它们的类型也匹配。因为其中一个是 string,other是number,返回false