Argument #1 ($value) must be of type Countable|array, null given (0)
Да, такая ошибка действительно может возникнуть при переходе на PHP 8. Она связана с ужесточением типизации встроенных функций, в частности — с функцией count().
Причина ошибки
Начиная с PHP 8.0, функция count() требует, чтобы её аргумент был либо массивом (array), либо объектом, реализующим интерфейс Countable. Если передать null, строку, число или любой другой неподходящий тип — будет выброшено фатальное исключение:
При переходе на PHP 8 такая ошибка действительно может возникать довольно часто 👇
❌ Текст ошибки
Argument #1 ($value) must be of type Countable|array, null given
🔍 Причина
В PHP 7 и ниже было допустимо вызывать count() с null:
count(null); // возвращало 0
Начиная с PHP 8, это стало фатальной ошибкой, потому что count() теперь строго требует:
-
массив (
array) -
или объект, реализующий
Countable
Если передаётся null, PHP выбрасывает ошибку.
✅ Типичные места возникновения
-
$arResult,$arParams,$items,$listи т.п. -
Код в Битрикс, старые компоненты и шаблоны
-
Результаты функций, которые могут вернуть
null
Пример проблемного кода:
if (count($items) > 0) {
// ...
}
🛠 Способы исправления
✅ Вариант 1. Проверка на массив (рекомендуется)
if (is_array($items) && count($items) > 0) {
// ...
}
✅ Вариант 2. Приведение к массиву (коротко и безопасно)
if (count((array)$items) > 0) {
// ...
}
👍 Самый популярный фикс при миграции на PHP 8
✅ Вариант 3. Null coalescing
if (count($items ?? []) > 0) {
// ...
}
✅ Вариант 4. Для Bitrix (часто встречается)
if (!empty($arResult['ITEMS'])) {
// ...
}
empty() безопасно работает с null.
🔧 Как быстро найти ошибки
Поиск по проекту:
count(
Особенно внимательно проверить:
-
шаблоны компонентов
-
кастомные модули
-
старые include-файлы
📌 Итог
| Было (PHP 7) | Стало (PHP 8) |
|---|---|
count(null)
|
❌ ошибка |
count([])
|
✅ OK |
Правильное решение — гарантировать, что в count() всегда передаётся массив или Countable.