绝对精神错乱。我今天正在测试一个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绝对不等于...
答案 0 :(得分:10)
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。
答案 1 :(得分:1)
使用==
比较字符串和数字时,PHP会将该字符串转换为数字。
字符串'P'
中没有任何数字字符。因此,PHP
将其评估为数字0
。最后0 == 0
发生,true
。
另一方面,如果你使用三等于(===
),那就提到了转换
没有发生。 PHP期望它们的类型也匹配。因为其中一个是
string,other是number,返回false
。