为什么 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.
这些符合预期(根据 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.