gpt4 book ai didi

php - 为什么 PHP 在[宽松地]比较两个数字字符串之前将它们转换为数字?

转载 作者:行者123 更新时间:2023-12-03 01:33:06 26 4
gpt4 key购买 nike

我浏览了几个类似的问题,但它们都只陈述了事实:

If ... comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.

好的,我明白了。它解释了当 '00001' == '1' 返回 TRUE 时发生了什么。

问题是:为什么 PHP 这样做?
探测字符串是否为数字然后转换(如果是)的原因是什么?为什么我们不能直接比较两个字符串呢?

如果两个操作数具有不同类型,我可以相当理解需要进行什么转换。但为什么当两者都是字符串时它会出现“usual math ”?

最佳答案

您可以比较两个字符串。

"00001" === "1"  // false

记住==表示等效===表示相等

我对为什么会出现这种情况的唯一猜测是,在 PHP 成为松散类型语言之前,一开始就努力成为一种无类型语言。

PHP 最初是字符串处理器,允许在其中编写一些脚本。由于网络上的所有输入本质上都是文本输入,因此在处理数字时必须努力考虑文本输入才能表现得理智。

我对此可能是错的,但我不相信显式转换数据类型的能力进入阶段,直到 PHP 4 引入了 *val 函数(如 intval)等,我认为转换符号,如(int) 之后出现。

对于非比较操作,这非常简单,因为它们都有一个与之关联的类型(+ -/* 都处理数字,而 . 处理字符串),因此在这些情况下应该如何转换的清晰路径是显而易见。

但是通过变量之间的相等或等价检查,唯一的方法是将所有看起来像数字的东西都视为数字,因为当时获得它的唯一方法是通过外部将其视为字符串否则就没有办法做到这一点。

关于php - 为什么 PHP 在[宽松地]比较两个数字字符串之前将它们转换为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16879973/

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