1С-Битрикс и PHP 8: Argument #1 ($value) must be of type Countable|array

1С-Битрикс и PHP 8: Argument #1 ($value) must be of type Countable|array

Еще одна ошибка в работе сторонних модулей 1С-Битрикс, которую можно встретить при обновлении PHP до 8 версии, это:

Argument #1 ($value) must be of type Countable|array, null given (0)

Данная ошибка характерна, например, для функций count(), sort(), ksort() и подобных.

Разберемся в чем суть и как можно быстро решить данную проблему на примере функции count():.

В битриксе можно часто встретить подобный код, которым разработчики проверяли наличие элементов в массиве и, в зависимости от результата, выполняли какое либо действие:

if (count($arResult["ITEMS"]) > 0) {}

Еще один вариант подобной проверки, который можно встретить в коде:

if (count($arResult["ITEMS"])) {}

Ранее данная конструкция нам возвращала false и в случае если $arResult["ITEMS"] === Array(), и в случае если $arResult["ITEMS"] неопределен. Теперь же возникнет ошибка, если $arResult["ITEMS"] не определен или его значение не может быть "посчитано", например если значение типа Integer

Быстро исправить данную ошибку можно следующим образом:

if (is_countable($arResult["ITEMS"]) && count($arResult["ITEMS"]) > 0)

Или

if (is_array($arResult["ITEMS"]) && count($arResult["ITEMS"]) > 0)

Главная суть в том, что переменная, передаваемая в функцию count() должна существовать, быть определена и иметь тип, который может быть "посчитан", например Array

Для быстрого решения этой ошибки в функциях сортировки sort(), ksort() и т.д. можно использовать следующий код:

if (is_array($arResult["ITEMS"])) sort($arResult["ITEMS"]);

А так же возможен вариант явного приведения переменной к необходимому типу:

$arResult["ITEMS"] = (array)$arResult["ITEMS"];

Или

sort((array)$arResult["ITEMS"]);

Но в данном случае нужно понимать, что изначальное значение типа null, boolean, integer будет приведено к типу Array, что не всегда правильно для дальнейшего выполнения кода

Назад к списку

Читайте также

1С-Битрикс и PHP 8: Non-static method cannot be called statically
PHP 8 1С-Битрикс
1С-Битрикс и PHP 8: Non-static method cannot be called statically
Еще одна ошибка, которая может возникнуть в сторонних модулях 1С-Битрикс при обновлении до PHP 8
1С-Битрикс и PHP 8: исправляем ошибки [Ux11] и non-static method
PHP 8 1С-Битрикс
1С-Битрикс и PHP 8: исправляем ошибки [Ux11] и non-static method
При обновлении PHP до 8 версии в работе сторонних модулей 1С-Битрикс могут возникнуть ряд ошибок. Рассмотрим как исправить некоторые из них