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