#Что означает сообщение
Deprecated: Passing null
В PHP 8.1 передача null во встроенные функции объявлена устаревшей. Проверяйте значения и используйте оператор ??.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Значение null | Предупреждение показывает передачу null во встроенную функцию | Обработать null до вызова |
| Старый код | Проблема в устаревшей функции собственного приложения | Исправить типы по PHP 8.1+ |
| Пустой ввод | Необязательное поле формы отсутствует | Явно обработать значение по умолчанию |
| Библиотека | Предупреждение находится внутри vendor | Обновить библиотеку |
#Пошаговое решение
- Найдите вызов, передающий null во встроенную функциюВ журнале PHP 8.1+ найдите предупреждение
Deprecated: Passing null to parameter #...и файл со строкой. Откройте этот вызов в редакторе: напримерtrim($name)илиstrlen($text). Новые версии PHP предупреждают оnullдля параметров встроенных функций с не-null типами. Не отключайте вывод предупреждений как замену исправления кода. - Установите смысл отсутствующего значенияОпределите, почему переменная равна
null: отсутствует поле формы, ключ SQL, результат разбора JSON или необязательный аргумент. Для строкового поля, где отсутствие равно пустой строке, подходит$name = trim($value ?? "");. Если отсутствие запрещено, проверяйте$value === nullи выдавайте понятную ошибку ввода, вместо тихой подмены. Не приводите к строке данные с непредусмотренными типами. - Проверьте сторонний код и совместимость библиотекЕсли предупреждение находится в
vendor/или установленной теме/модуле, узнайте версию пакета и проверьте официальное обновление с поддержкой PHP 8.1+. Не редактируйтеvendorвручную — изменения будут потеряны при следующемcomposer install. Для собственных функций используйте корректные объявления?stringтолько там, где их код обрабатываетnull. Сохраните тестовые случаи для пустой строки и отсутствующего значения. - Повторите выполнение без подавления ошибокПроведите тест с заполненным и пустым входом, убедитесь, что итоговые строки и числа корректны и предупреждение больше не пишется в журнал. Если проблема скрыта только за отключением
E_DEPRECATED, исправление не выполнено. Проверьте соседние подобные вызовы в том же модуле и зафиксируйте версию PHP, на которой проводилась проверка.
#На что обратить внимание
Не скрывайте все сообщения PHP как единственное исправление: проблема может стать ошибкой в будущих версиях. Проверяйте поведение на тестовом окружении перед обновлением рабочего сайта.