【问题标题】:PHP8 compare 0 with an empty string, what is the logic behind that [duplicate]PHP8将0与空字符串进行比较,这背后的逻辑是什么[重复]
【发布时间】: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


【解决方案1】:

PHP 8 中存在不兼容问题。您可以在此处找到它:https://www.php.net/manual/en/migration80.incompatible.php

我建议您在比较之前先确定您的值

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

【讨论】:

    【解决方案2】:

    我认为这是因为 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 等于 False,b 等于 False”,但在 PHP8 中返回“不,False 不等于 False!!!,有问题”

    你可以在PHP online Sandbox试试它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 2016-12-22
      • 2021-07-10
      相关资源
      最近更新 更多