我尝试执行此代码
<?php
$id = 'p1';
echo $id."<br>";
echo ($id == 0) ? 'true' : 'false';
?>
有人可以向我解释为什么PHP认为'p1'等于0?
答案 0 :(得分:3)
在将字符串与数字进行比较时,Php从字符串'p1'
执行implicit conversion到数字int(0)
:
var_dump((int)'p1');
// int(0)
所以真正发生的事情是:
echo ((int)'p1') == 0) ? 'true' : 'false';
因此,任何不以数字与零开头的字符串都会生成true
,因此您的脚本中会显示'true'
。
答案 1 :(得分:1)
转换为布尔值时,会考虑以下值 FALSE:
the boolean FALSE itself the integer 0 (zero) the float 0.0 (zero) the empty string, and the string "0" an array with zero elements an object with zero member variables (PHP 4 only) the special type NULL (including unset variables) SimpleXML objects created from empty tags
其他每个值都被视为TRUE(包括任何资源)。
您的字符串不为空,因此为TRUE
答案 2 :(得分:1)
来自PHP Manual:
如果我们尝试将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都会转换为数字,并且数字执行比较
正如您在同一页面上的比较运算符表中所见:
$a === $b
- 相同 -TRUE
如果$a
等于$b
,且它们的类型相同。
答案 3 :(得分:1)
这是因为php是松散类型的语言。
基本上,不同类型之间的比较(在您的情况下为字符串和整数)有时会产生令人惊讶的结果。并且基本上从未建议比较不同类型的变量。不过,您可以使用[类型比较表](单击)1来检查预期的结果,并找出哪些情况不会产生令人惊讶的结果。