При работе над проектами WordPress с использованием PHP 8.x вы можете столкнуться со следующей ошибкой:
Неустранимая ошибка: неперехваченный PHP_CodeSniffer\Exceptions\RuntimeException: trip(): передача значения null в параметр № 1 ($string) типа string не рекомендуется в /path/...
Эта ошибка возникает из-за предупреждения об устаревании в PHP 8.x, где передача значения null в функцию обрезки() больше не разрешена. В частности, эта проблема возникает при анализе стандартов кодирования WordPress (WPCS), который является частью настройки PHP_CodeSniffer. На момент написания этой статьи эта проблема сохраняется даже при использовании последних версий PHP_CodeSniffer и стандартов кодирования WordPress.
PHP_CodeSniffer — это инструмент, который помогает разработчикам поддерживать стандарты кодирования, проверяя их PHP-код на предмет нарушений указанных правил. Стандарты кодирования WordPress (WPCS) предоставляют набор рекомендаций по написанию согласованного и чистого кода в проектах WordPress. Упомянутая выше ошибка обычно указывает на то, что фрагмент кода не соответствует этим стандартам из-за изменений в поведении PHP.
Чтобы это исправить, мы можем вручную изменить файл, вызывающий проблему, найти строку, в которой вызывается функция Trim(), и обновить код, чтобы обеспечить правильную обработку нулевых значений при вызове функции Trim().
Например, в файле vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php найдите строку 280 и замените следующую строку:
// this $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ); // to this $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );
Однако, как и во многих решениях в области разработки программного обеспечения, то, что вы можете это сделать, не означает, что вам следует это делать.
Хотя предыдущий подход может исправить ошибку, важно помнить, что изменение файлов поставщиков не является устойчивым решением. Изменения будут потеряны каждый раз, когда вы обновляете свои зависимости через Composer.
Лучшим подходом будет создание файла патча.
Вот пошаговое руководство по созданию и применению исправления для устранения проблемы.
Более надежное решение — создать файл исправления. Этот метод позволяет автоматически применять изменения каждый раз, когда вы устанавливаете или обновляете зависимости.
Файл исправления — это текстовый файл, содержащий различия между двумя версиями файла — по сути, снимок «до» и «после».
В каталоге вашего проекта создайте папку для хранения файла патча:
mkdir -p патчи
В папке patches/ создайте новый файл исправления с именем fix-null-trim.patch. Вы можете сделать это с помощью текстового редактора:
touch patches/fix-null-trim.patch
Откройте fix-null-trim.patch в текстовом редакторе и добавьте следующий контент:
--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -280,7 280,7 @@ // Original code with `trim()` // Update this line: - $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) ); $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php @@ -194,7 194,7 @@ // Original code with `trim()` // Update this line: - $cl_text_domain = trim( PHPCSHelper::get_config_data( 'text_domain' ) ); $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' : trim( PHPCSHelper::get_config_data( 'text_domain' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php @@ -1144,7 1144,7 @@ // Original code with `trim()` // Update this line: - $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) ); $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
Этот патч сообщает Composer заменить проблемную строку в PrefixAllGlobalsSniff.php более безопасной версией, которая использует оператор объединения значений null (??), чтобы избежать передачи значения null в функцию обрезки().
Далее вам нужно указать Composer автоматически применять этот патч каждый раз, когда вы устанавливаете или обновляете свои зависимости.
Откройте файл композитора.json вашего проекта. Добавьте следующую конфигурацию в раздел «Дополнительно». Если «дополнительный» раздел еще не существует, вам необходимо его создать.
json "extra": { "patches": { "wp-coding-standards/wpcs": { "Fix null trim() issue": "patches/fix-null-trim.patch" } } }
Это указывает Composer применять файл fix-null-trim.patch к пакету wp-coding-standards/wpcs при установке или обновлении зависимостей.
Чтобы применять патчи через Composer, вам понадобится плагин композитор-патчи. Для установки выполните следующую команду:
композитору требуются cweagans/composer-patches
Теперь вы можете применить патч, выполнив следующую команду:
установка композитора
Во время установки Composer применит патч из папки patches/ к файлу PrefixAllGlobalsSniff.php.
Создавая и применяя файл исправлений, вы гарантируете, что ваши исправления сохраняются во всех обновлениях Composer, придерживаясь лучших практик в разработке программного обеспечения. Регулярно отслеживайте обновления PHP_CodeSniffer и стандартов кодирования WordPress, так как эти проблемы могут быть решены в будущих выпусках. Этот упреждающий подход не только повышает качество кода, но и улучшает рабочий процесс разработки в средах PHP 8.x.
Я поделился файлом патча в этом Gist. Не стесняйтесь использовать его в качестве справочника для реализации подобных исправлений в ваших проектах!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3