我正在比较除第5个字符外相同的两个字符串。 PHP似乎认为它们在松散比较时是相同的,并且在严格比较时不一样(即使它们都是字符串,这意味着它们的类型匹配)。我是不会想到的,或者对此有合理的解释吗?
[21:39 ~]$ php -a
Interactive shell
php > var_dump('29273E-1443035285' == '29274E-1443035285');
bool(true)
php > var_dump('29273E-1443035285' === '29274E-1443035285');
bool(false)
php > %
[21:40 ~]$ php --version
PHP 7.0.2 (cli) (built: Jan 6 2016 11:50:59) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
答案 0 :(得分:2)
var_dump('29273E-1443035285' == '29274E-1443035285');
这些字符串看起来像浮点数,因此比较是在数字上下文中执行的,并且它们被转换为双精度数。因为它们非常小,所以它们都被解释为double(0)
。这就是为什么他们彼此==
。
===
将它们作为字符串进行测试,因为它们不是同一个字符串,所以测试返回false
。
答案 1 :(得分:0)
我认为PHP正在将第一组数字作为浮点进行评估,它们最大值或等于0(数学上不好,所以我不确定它们的相同之处。)。
第二个版本将它们作为字符串进行测试。
有关详细信息,请参阅此主题。 Why does ("00e0" == "00e1") evaluate as true?