【发布时间】:2021-12-29 08:52:38
【问题描述】:
以下代码在 PHP 7 上返回 false,但在 PHP 8 上返回 true。有人可以解释为什么会这样吗?
var_dump("U0M262" > 100000);
【问题讨论】:
-
这是 php 8 的新 rfc 比较 wiki.php.net/rfc/string_to_number_comparison
-
@Kevin 所以它将 100000 转换为字符串,然后进行字符串比较?
-
是的,他们改变了行为,将它们作为非严格的字符串进行比较。因为左边的不是数字stackoverflow.com/a/66034344/3859027
-
@Kevin 一个小修正,
>运算符没有“严格”版本或模式,所以“非严格”在这里没有意义。 -
@NicoHaase 我认为这两个问题都值得保留,因为它们涵盖了同一更改的不同方面:一个涵盖了没有更改的情况,并谈到平等比较(具有
==和===风格);这一个涵盖了已经改变的情况,大于和小于(只有一种风格);还有a question about the common case of empty strings。