Почему count (false) возвращает 1?

Знаете ли вы, почему <?= count(false) ?> возвращает 1?

Ответ 1

Указано поведение:

Если var не является массивом или объектом с реализованным счетчиком интерфейс, будет возвращен.

Согласно http://php.net/manual/en/function.count.php

Ответ 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".