Почему assert of range (0, 0) возвращает true для любого одноэлементного массива независимо от его значения? - PullRequest
1 голос
/ 26 мая 2019

Это как и ожидалось (за 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 Ответ

1 голос
/ 26 мая 2019

Лучшим объяснением является оператор == , преобразующий элемент массива в int , так как левая часть оператора была массивом с int.

Поскольку оба intval('not zero') и (int) 'not zero' вернут 0, сравнение вернет true, поскольку оно равно 0 (как можно видеть здесь ).

При использовании === PHP не выполняет приведение типов, поэтомустрока остается строкой, поэтому сравнение не выполняется (из операторов PHP ):

===: ИСТИНА, если $ a и $ b имеют одинаковые пары ключ / значение в одинаковыхи того же типов .

...