100000); 最佳答案 字符串和数字之间的比较没有明-6ren">
gpt4 book ai didi

php - 在 php 8 上使用比较时得到非常奇怪的结果

转载 作者:行者123 更新时间:2023-12-04 07:55:04 26 4
gpt4 key购买 nike

它返回 false在 PHP 7 但 true在 PHP 8 上。有人可以解释为什么会发生这种情况吗?

var_dump("U0M262" > 100000);

最佳答案

字符串和数字之间的比较没有明显正确的结果。在许多语言中,它只会给出错误;在其他语言中,包括 PHP,该语言试图通过将两个操作数转换为相同类型来理解它,但这涉及对“首选”哪种类型的判断。
从历史上看,PHP 更喜欢比较数字而不是比较字符串:它处理 "U0M262" > 100000(int)"U0M262" > 100000 .自 (int)"U0M262"没有明显的值(value),它被评估为0 ,表达式变为 0 > 100000 ,这是错误的。
自 PHP 8 起,this behaviour has changed并且 PHP 现在只对“数字字符串”使用数字比较,例如"42"显然“看起来像”42 .自 "U0M262"不符合数字字符串的要求,"U0M262" > 100000现在被视为 "U0M262" > (string)100000 .这对两个字符串的排序顺序进行了逐字节比较,并发现由于“U”在 ASCII(以及任何 ASCII 派生编码,包括 UTF-8)中出现在“1”之后,因此结果为真。
与以往一样,您可以使用显式强制转换告诉 PHP 您打算进行哪种比较,并在所有版本中获得正确的行为:

var_dump((int)"U0M262" > (int)100000); // bool(false)
var_dump((string)"U0M262" > (string)100000); // bool(true)
(显然,如果你对双方都进行硬编码,这毫无意义,但假设一个或两个都是变量,这就是你的做法。)

关于php - 在 php 8 上使用比较时得到非常奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66739825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com