首页 > 解决方案 > 为什么范围(0, 0)的断言对于任何单元素数组都返回true,而不管其值如何?

问题描述

这些符合预期(根据https://php.net/manual/en/language.operators.array.php):

assert( range( 0, 0 ) == [0] );
assert( range( 0, 0 ) == ['0'] );
assert( range( 0, 0 ) !== ['not zero'] );
assert( range( 0, 1 ) != ['not zero', 'not zero'] );

但是,为什么无论其值如何,range( 0, 0 )显然都被认为==等于任何单元素数组?

assert( range( 0, 0 ) == ['not zero'] ); // return TRUE??

标签: phpcastingrangeassert

解决方案


更好的解释是==运算符数组元素转换为int,因为运算符的左侧是带有 int 的数组。

因为intval('not zero')(int) 'not zero'都将返回 0,所以比较将返回 true ,因为它是 0(如您在此处看到的那样)。

使用===PHP 时不进行类型转换,因此字符串保持为字符串,因此比较失败(来自PHP 运算符):

===: 如果 $a 和 $b 具有相同的键/值对,且顺序相同且类型相同,则为 TRUE 。


推荐阅读