PHP8将0与空字符串进行比较,其背后的逻辑是什么

PHP8将0与空字符串进行比较,其背后的逻辑是什么,php,string-comparison,php-8,Php,String Comparison,Php 8,在PHP8中,为什么要将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

在PHP8中,为什么要将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";
$a=0;
$b=“”;
echo($a==false)?“是a是假的:”:“否”
“; echo($b==false)?“yes b为False
”:“no
”; 回声($a=$b)?“是的,a等于假,b等于假”:“不,假不等于假!!!,有问题”;
输出为“否,False不等于False!!!,有问题”

在上面的代码中,我希望给出
yes a等于False,b等于False
,但PHP让我大吃一惊

你能帮我理解为什么输出是

如果(false==false)
它应该返回true,并且工作正常

但是,

如果(“==0)
它也应该返回true,但它将返回false,即使
0
为false我想知道为什么???

我想要这背后的逻辑


我使用PHP8.0.2

PHP8中存在不兼容。你可以在这里找到它:

我建议你在比较之前先确定自己的价值观

if (boolval($a) == boolval($b)) {
   // do stuff 
}

我认为这是因为PHP8

我试试这个代码

 $a = 0;
 $b = "";
 $result = ($a == $b) ? "yes a equals False and b equals to False" : "no, False is not equal to False!!!, there is a problem";
 echo($result);
在PHP5和PHP7中,其返回“是a等于假,b等于假”,但在PHP8中,其返回“否,假不等于假!!!,这是一个问题”


您可以在

中尝试它的功能。请参阅此处未更新的文档。如另一篇文章所述,文档的这一部分已过时。正如其他人所说,这是由于在PHP8中字符串和数字的比较方式发生了变化。@Girgias,请仔细阅读问题,
如果(“==0”),它也应该返回true,但它将返回false,即使“”和0都是false。我想知道为什么???
这是我的问题,为什么?原因是,当字符串与数字(int或float)进行比较时,在PHP8.0之前,字符串总是被转换为相应的类型,即
“==0
(int)”相同“==0
,这将为您提供
0==0
true
。这也是为什么在PHP8.0之前,“foo”==0返回
true