PHP认为P == 0

Gam*_*mer 2 php conditional types

这绝对是疯狂的.我今天正在测试一个post变量,它应该总是评估为一个字符.示例代码是......

if($_POST['status'] == '' || $_POST['status'] == 0){ die('oh no!'); }
Run Code Online (Sandbox Code Playgroud)

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

echo 'P1: '.intval($_POST['status']=='').'<br />';
echo 'P2: '.intval($_POST['status']==0).'<br />';
echo 'P3: '.intval('P'==0).'<br />';
Run Code Online (Sandbox Code Playgroud)

你猜怎么着?P2和P3都评估为TRUE.intval只是在P1上显示0而不是什么都没有.

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

Tch*_*upi 10

PHP文档:

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

  • @GameCharmer:在大多数其他类型允许的语言中都是一样的.php试图尽力解释你想要的东西,但如果你坚持做"长颈鹿==等离子电视",那么它只是GIGO ...... (2认同)