为什么range(0,0)的assert对于任何一个单元素数组都返回true,而无论其值如何?

时间:2019-05-26 17:33:01

标签: php casting range assert

这些是预期的(每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??

1 个答案:

答案 0 :(得分:1)

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

因为intval('not zero')(int) 'not zero'都将返回0,所以比较将返回true,因为它是0(就像可以看到的here)。

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

  

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