为什么 assert of range( 0, 0 ) return 对于任何单元素数组都为真,而不管其值如何?

Why is assert of range( 0, 0 ) return true for any one-element array regardless of its value?

这些符合预期(根据 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??

更好的解释是 == 运算符 convert 数组元素为 int 因为运算符的左侧是数组与 int.

因为 intval('not zero')(int) 'not zero' 都将 return 0 比较将 return 为真,因为它是 0(正如可以看到的 here)。

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

===: TRUE if $a and $b have the same key/value pairs in the same order and of the same types.