#Что означает ошибка
Uncaught TypeError
В PHP 8 строгая типизация выбрасывает TypeError при передаче неверного типа (например, null в count()). Проверяйте значения перед вызовом и обновляйте старый код.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Передан null | Трассировка показывает null вместо array | Проверить источник и допустимость null |
| Старый код | Ошибка появилась после обновления PHP | Обновить несовместимый собственный код |
| Неверный тип | В функцию передан другой тип | Добавить валидацию аргумента |
| Нет значения БД | В SQL-поле получен null | Правильно обработать отсутствие данных |
#Пошаговое решение
- Найдите функцию, тип аргумента и место вызоваПрочитайте полный
Uncaught TypeError, напримерArgument #1 must be of type array, null given, вместе с файлом и номером строки. В редакторе откройте именно вызывающую строку и найдите, откуда пришло значение: поле формы, результат SQL-запроса, JSON или внешний API. Не правьте вслепую заголовок функции и не выключайте строгую типизацию во всём проекте. - Проверьте источник null и ожидаемое поведениеПеред проблемным вызовом добавьте безопасную диагностическую запись
get_debug_type($value)в журнал без персональных данных. Если параметр обязан быть массивом, устраните источникnullи проверьте валидность входных данных. Для массива из декодирования JSON вызывайтеjson_decode($json, true, 512, JSON_THROW_ON_ERROR)с обработкой исключения, чтобы не принять ошибку разбора за пустой список. - Добавьте корректную проверку типа или значение по умолчаниюЕсли отсутствие значения допустимо, используйте явную нормализацию, например
$items = is_array($items) ? $items : [];передcount($items). Еслиnullобозначает ошибку, выбрасывайте осмысленное исключение или возвращайте ответ с сообщением об обязательном поле, а не молча подменяйте данные пустыми. Изменять сигнатуру на?arrayможно только если вся функция действительно умеет работать сnull. - Проверьте нормальный ввод, null и несовместимые типыЗапустите тесты на реальном массиве, пустом массиве,
nullи строке; ожидаемое поведение должно быть разным и документированным. Проверьте, чтоTypeErrorне скрыт, а исходная операция возвращает корректные данные. Если ошибка появилась после перехода на PHP 8, проверьте совместимость зависимостей и актуальные версии библиотек, не выполняя понижение PHP как основной способ исправления.
#Если проблема осталась
При повторении «PHP 8: Uncaught TypeError — аргумент должен быть типа array, null передан» сохраните обезличенную строку из журнала и верните прежнюю конфигурацию, если правка ухудшила работу сайта. Уточните активную версию процесса и конфигурационный файл, прежде чем предпринимать следующий шаг.