Знаете ли вы, почему <?= 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".