【发布时间】:2021-03-02 11:06:39
【问题描述】:
在 PHP 8 中,为什么将 0 与空字符串进行比较,让我感到惊讶。
我无法理解其中的逻辑。
$a = 0;
$b = "";
echo ($a == false) ? "yes a is False<br>" : "no<br>";
echo ($b == false) ? "yes b is False<br>" : "no<br>";
echo ($a == $b) ? "yes a equals False and b equals to False" : "no, False is not equal to False!!!, there is a problem";
输出是"no, False is not equal to False!!!, there is a problem"
在上面的代码中,我本以为会给出yes a equals False and b equals False,但 PHP 让我感到惊讶。
你能帮我理解为什么输出是no吗?
if(false == false) 它应该返回 true 并且工作正常。
但是,
if("" == 0) 它也应该返回 true,但它会返回 false,即使 "" 和 0 都是 false。 我想知道为什么???
我想要这背后的逻辑。
我使用 PHP 8.0.2
【问题讨论】:
-
见这里php.net/manual/en/… 只是文档没有更新。
-
正如另一个response 所说,这部分文档已过时。正如其他人所说,这是由于从 PHP 8 开始比较字符串和数字的方式发生了变化。
-
@Girgias,请仔细阅读问题,
if("" == 0) it should return true too, but it will return false, even "" and 0 are false. I want to know why???这是我的问题,为什么? -
原因是当字符串与数字(int 或 float)进行比较时,在 PHP 8.0 之前,字符串总是被强制转换为相应的类型,即@ 987654333@ 与
(int) "" == 0相同,它为您提供0 == 0=>true。这也是为什么在 PHP 8.0 之前"foo" == 0返回true
标签: php string-comparison php-8