Знаете ли вы, почему <?= count(false) ?> возвращает 1?
Почему count (false) возвращает 1?
Ответ 1
Указано поведение:
Если var не является массивом или объектом с реализованным счетчиком интерфейс, будет возвращен.
Ответ 2
Потому что false также является значением, и если count() не получает массив, а действительную переменную, он возвращает true, который равен 1.
$result = count(null);
// $result == 0
$result = count(false);
// $result == 1
Ответ 3
Мне кажется, что PHP не позволяет использовать count(), чтобы определить, является ли элемент массивом или объектом. У них есть специальные функции для этого (is_array(), is_object()), и может возникнуть соблазн наивно использовать count() и проверить условие false для определения массива или объекта. Вместо этого PHP делает non-objects, non-arrays возвращает 1 (что является правдивым), так что этот метод не может быть наивно использован таким образом (поскольку 0 является допустимым, ложным результатом для пустого массива/объекта).
Это может быть причиной выбора значения, возвращаемого функцией в описываемой ситуации.
Ответ 4
Хороший способ запомнить это в своем уме:
- count (false) в основном то же самое, что:
- count ( "one boolean" ), и поэтому в результате получается "ONE".