Еще одна ошибка в работе сторонних модулей 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, что не всегда правильно для дальнейшего выполнения кода