让我们有一个简单的 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 8 发布时,他们还在网站上放了一个 release announcement。这是新的重大变化之一 saner string to number comparison 的一部分。
引用:
<块引用>当与数字字符串比较时,PHP 8 使用数字比较。否则,它将数字转换为字符串并使用字符串比较。
此行为记录在 Backward incompatible changes 中。
<块引用>字符串与数字的比较
现在数字和非数字字符串之间的非严格比较 通过将数字转换为字符串并比较字符串来工作。 数字和数字字符串之间的比较继续作为 前。值得注意的是,这意味着 0 == "not-a-number" 被认为是 现在是假的。
PHP 文档维护者在这里,PHP 8 确实改变了语义,这在迁移指南中有所显示。然而,文档的其他部分仍然滞后,因为我们没有人力/时间来编辑和记录与 PHP 8 相关的所有更改。
所以这不是错误,而是当前类型杂耍页面对于 PHP 8.0 已过时的事实。
可以通过对 GitHub 存储库的拉取请求为文档做出贡献。