0

让我们有一个简单的 PHP 脚本

<?php
var_dump("php" == 0);

根据官方文档(https://www.php.net/manual/en/types.comparisons.php),这应该评估为true

但是 对于 PHP <=7.4 确实如此,但对于 PHP 8.0 则没有

在当前版本的 PHP 8 (8.0.0 - 8.0.2) 中,它评估为false.

相同的脚本在不同的 PHP docker 镜像中运行

此功能是否有任何未记录的更改,或者这是一个错误?还是我错过了什么?

谢谢

4

3 回答 3

3

当 PHP 8 发布时,他们还在网站上发布了发布公告。这是新的主要变化之一,更理智的字符串到数字比较的一部分。

去引用:

当与数字字符串进行比较时,PHP 8 使用数字比较。否则,它将数字转换为字符串并使用字符串比较。

于 2021-02-25T08:02:04.850 回答
1

此行为记录在向后不兼容的更改中。

字符串到数字的比较

数字和非数字字符串之间的非严格比较现在通过将数字转换为字符串并比较字符串来工作。数字和数字字符串之间的比较继续像以前一样工作。值得注意的是,这意味着 0 == "not-a-number" 现在被认为是错误的。

于 2021-02-25T08:04:51.177 回答
1

PHP 文档维护者在这里,PHP 8 确实改变了语义,这在迁移指南中有所显示。但是文档的其他部分仍然落后,因为我们没有人力/时间来编辑和记录与 PHP 8 相关的所有更改。

所以这不是错误,更多的是当前类型杂耍页面相对于 PHP 8.0 已经过时。

可以通过对GitHub存储库的拉取请求为文档做出贡献。

于 2021-02-25T17:27:04.120 回答