Миграция на PHP 8.1 - как исправить устаревшую ошибку передачи null в параметр - переименовать встроенные функции

В PHP 8.1 устарела передача null в качестве параметра многим функциям. Основная проблема связана с такими функциями, как «htmlspecialchars» и «trim», где null больше не преобразуется в пустую строку. Чтобы решить эту проблему, не используя огромное количество кода, я пытался переименовать исходные встроенные функции и заменить их обертками, которые могут исправить ввод с нуля на пустую строку. Основная проблема в том, что функция "rename_function" больше не работает, последнее обновление было сделано в 2004 году. Мне нужно какое-то переопределение встроенных функций, чтобы не писать нулевую проверку каждый раз, когда функция вызывается, что делает весь мой код в два раза больше. Единственное другое решение, которое я могу придумать, - это использовать только мои пользовательские функции, но это все равно требует прохождения всего моего кода и сторонних библиотек, которые у меня есть.

В PHP 8.1, когда null передается во встроенную функцию, он больше не преобразуется автоматически в пустую строку.

Укрывает ли JavaScript ошибку с самого начала?
Укрывает ли JavaScript ошибку с самого начала?
Typeof(null) → Ошибка в том, что он возвращает тип Object, в то время как ожидается, что он вернет тип null. Эта ошибка - ситуация, пришедшая из...
0
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, две вещи, которые нужно иметь в виду:

  1. PHP 8.1 осуждает эти вызовы, он не делает их ошибки. Цель устаревания состоит в том, чтобы дать авторам заблаговременное уведомление об исправлении их кода, поэтому у вас и авторов используемых вами библиотек есть время до выхода PHP 9.0, чтобы исправить ситуацию. Так что не паникуйте, что не все исправляется сразу, и будьте терпеливы с сопровождающими библиотеки, которые займутся этим в свое время.
  2. Быстрое исправление в большинстве случаев заключается в использовании нулевой оператор объединения для предоставления значения по умолчанию по мере необходимости, поэтому вам не нужна длинная проверка нуля при каждом использовании. Например, htmlspecialchars($something) можно заменить на htmlspecialchars($something ?? '').

Далее несколько вариантов:

  • В зависимости от того, сколько у вас случаев, вы можете просто исправить их вручную по несколько за раз, либо добавив ?? '', либо исправив логическую ошибку, когда вы все равно не ожидали нулевого значения.
  • Создавайте пользовательские функции, такие как nullable_htmlspecialchars, и выполняйте прямой поиск и замену в своем коде.
  • Создавайте собственные функции с пространством имен, такие как nullableoverride\htmlspecialchars; то в любом файле, где вы добавите use function nullableoverride\htmlspecialchars;, вместо встроенной будет использоваться эта функция. Однако это должно быть добавлено в каждый файл, поэтому вам может понадобиться инструмент для его автоматического добавления.
  • Используйте Ректор для автоматического добавления ?? '' к соответствующим вызовам функций, чтобы вам не приходилось редактировать их все вручную. К сожалению, встроенного правила для этого (пока) не существует, поэтому вам придется научиться писать свои собственные.
  • Возможно, проще, в зависимости от ваших навыков, использовать поиск и замену регулярных выражений, чтобы добавить ?? '' к простым случаям.

Я попытаюсь использовать функцию strval для преобразования null в пустую строку, чтобы при необходимости запустить ее на php до версии 7.0, чтобы поддерживать более широкий диапазон установок.

Janis T 04.04.2022 09:46

Другие вопросы по теме