Ao trabalhar em projetos WordPress com PHP 8.x, você pode encontrar o seguinte erro:
Erro fatal: PHP_CodeSniffer não detectado\Exceptions\RuntimeException: trim(): Passar null para o parâmetro #1 ($string) do tipo string está obsoleto em /path/...
Este erro ocorre devido a um aviso de descontinuação no PHP 8.x, onde passar null para a função trim() não é mais permitido. Especificamente, esse problema surge em um sniff do WordPress Coding Standards (WPCS), parte da configuração do PHP_CodeSniffer. Na data em que este livro foi escrito, mesmo com as versões mais recentes do PHP_CodeSniffer e dos padrões de codificação do WordPress, esse problema persistia.
PHP_CodeSniffer é uma ferramenta que ajuda os desenvolvedores a manter os padrões de codificação, verificando seu código PHP em busca de violações de regras especificadas. Os Padrões de Codificação do WordPress (WPCS) fornecem um conjunto de diretrizes para escrever código consistente e limpo em projetos WordPress. O erro mencionado acima normalmente indica que um trecho de código não está aderindo a esses padrões devido a mudanças no comportamento do PHP.
Para corrigir isso, podemos modificar manualmente o arquivo que está causando o problema, localizar a linha onde trim() é chamado e atualizar o código para garantir que os valores nulos sejam tratados corretamente ao chamar trim().
Por exemplo, no arquivo vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php, localize a linha 280 e substitua a seguinte linha:
// 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' ) );
No entanto, como em muitas decisões no desenvolvimento de software, só porque você pode fazer isso, não significa que você deva.
Embora a abordagem anterior possa corrigir o erro, é importante lembrar que modificar os arquivos do fornecedor não é uma solução sustentável. As alterações serão perdidas sempre que você atualizar suas dependências via Composer.
Uma abordagem melhor, então, é criar um arquivo de patch.
Aqui está um guia passo a passo sobre como criar e aplicar um patch para o problema
Uma solução mais robusta é criar um arquivo de patch. Este método permite que você aplique suas alterações automaticamente sempre que instalar ou atualizar suas dependências.
Um arquivo de patch é um arquivo de texto que contém as diferenças entre duas versões de um arquivo - essencialmente um instantâneo "antes" e "depois".
No diretório do seu projeto, crie uma pasta para armazenar o arquivo de patch:
mkdir -p patches
Dentro da pasta patches/, crie um novo arquivo de patch chamado fix-null-trim.patch. Você pode fazer isso com seu editor de texto:
toque em patches/fix-null-trim.patch
Abra fix-null-trim.patch em seu editor de texto e adicione o seguinte conteúdo:
--- 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' ) );
Este patch diz ao Composer para substituir a linha problemática em PrefixAllGlobalsSniff.php por uma versão mais segura que usa o operador de coalescência nulo (??) para evitar passar nulo para trim().
Em seguida, você precisa instruir o Composer para aplicar este patch automaticamente sempre que você instalar ou atualizar suas dependências.
Abra o arquivo compositor.json do seu projeto. Adicione a seguinte configuração na seção "extra". Se a seção "extra" ainda não existir, você precisará criá-la.
json "extra": { "patches": { "wp-coding-standards/wpcs": { "Fix null trim() issue": "patches/fix-null-trim.patch" } } }
Isso diz ao Composer para aplicar o arquivo fix-null-trim.patch ao pacote wp-coding-standards/wpcs quando ele instala ou atualiza dependências.
Para aplicar patches via Composer, você precisa do plugin compositor-patches. Execute o seguinte comando para instalar:
compositor requer cweagans/composer-patches
Agora, você pode aplicar o patch executando o seguinte comando:
instalação do compositor
Durante a instalação, o Composer aplicará o patch da pasta patches/ ao arquivo PrefixAllGlobalsSniff.php.
Ao criar e aplicar um arquivo de patch, você garante que suas correções persistam nas atualizações do Composer, aderindo às melhores práticas no desenvolvimento de software. Monitore regularmente as atualizações do PHP_CodeSniffer e dos padrões de codificação do WordPress, pois esses problemas podem ser resolvidos em versões futuras. Essa abordagem proativa não apenas melhora a qualidade do código, mas também melhora seu fluxo de trabalho de desenvolvimento em ambientes PHP 8.x.
Compartilhei o arquivo de patch neste Gist. Sinta-se à vontade para usá-lo como referência para implementar correções semelhantes em seus projetos!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3