PHP 8: A importância de ativá-lo em seu WordPress

Por Leandro Lopes 26/08/2022
18 Min Leitura
PHP 8: A importância de ativá-lo em seu WordPress
PHP 8: A importância de ativá-lo em seu WordPress

Entenda por que seu WordPress precisa migrar para o PHP 8.0!

Os sites WordPress requerem PHP e, à medida que o PHP evoluiu, o WordPress manteve-se. Mais recentemente, o PHP 7.4 tem sido a versão mais estável para WordPress. No entanto, como o PHP 7.4 chega ao fim de seu suporte de segurança em novembro de 2022, os sites de WordPress precisarão ser atualizados para mantere-sem seguros!

O que se segue é uma descrição das alterações e as etapas que nossos clientes e outras pessoas que usam o WordPress em outras plataformas podem fazer para se preparar.

A história do PHP 8.0

Lançado em novembro de 2020, o PHP 8.0 forneceu vários aprimoramentos e recursos que tornaram o novo código (e o código mais curto) mais resistente a bugs.

A maioria dos desenvolvedores encontrará benefícios substanciais no PHP 8.0. No entanto, como uma versão principal, contém várias alterações importantes . Isso torna a mudança do PHP 7.4 para o PHP 8.0 mais complicada do que, por exemplo, a mudança do PHP 7.3 para o PHP 7.4.

Especificamente, houve 49 mudanças importantes no PHP principal e 169 em todo o PHP 8 em geral, incluindo bibliotecas e extensões nas quais seu código pode depender.

A boa notícia é que, quando as organizações migrarem para o PHP 8.0, elas receberão suporte de segurança do projeto principal do PHP até novembro de 2023. Após essa data, uma organização precisará atualizar para o PHP 8.1, uma versão menor que exige uma alteração muito menor.

Novas características

O PHP 8.0 foi projetado para 1) corrigir casos extremos e inconsistências para tornar o PHP uma linguagem de script mais sólida e previsível e 2) fornecer novos recursos para melhorar a linguagem em geral. Isso inclui várias novas sintaxes que:

  • Facilite a escrita de código estritamente tipado, por exemplo, tipos de união statice mixedtipos, Stringableinterface e alterações no tratamento de números.
  • Reduza a quantidade de código que você precisa manter, por exemplo, operador nullsafe, promoção de propriedade do construtor, matchoperador e capturas sem captura.
  • Simplifique o código, como permitir ::classobjetos, vírgula à direita em listas de parâmetros, str_contains(), str_starts_with()e str_ends_with()funções, expressão de lançamento, atributos.

Também inclui Parâmetros Nomeados. No entanto, vale a pena notar que o núcleo do WordPress não reivindica compatibilidade com esse recurso. Portanto, embora você possa chamar suas próprias funções personalizadas com parâmetros nomeados, você não deve chamar funções do WordPress, pois os nomes dos parâmetros podem mudar sem aviso no futuro.

Leia também

Proliferação de suporte em todas as comunidades PHP e WordPress

Sempre que uma nova versão do PHP é lançada que inclui uma nova sintaxe, leva tempo para que as novas sintaxes sejam suportadas em todas as comunidades PHP e WordPress.

Ferramentas de desenvolvedor PHP

Ferramentas de desenvolvimento PHP como Composer, PHPUnit, PHP_CodeSniffer, PHPStan, Xdebug e vários IDEs precisam reconhecer as novas sintaxes de uma nova versão do PHP. Enquanto o PHP está continuamente sendo desenvolvido, pode haver um tempo de atraso antes que o ecossistema completo em torno de uma nova versão esteja disponível.

Muitas vezes, no entanto, as ferramentas podem estar prontas quando a versão final estiver pronta porque o trabalho de desenvolvimento aconteceu com base nas versões alpha , beta e release candidate que foram disponibilizadas com antecedência. Todas essas ferramentas e muito mais agora suportam PHP 8.0, o que a torna uma boa escolha para desenvolver código PHP e especificamente para desenvolver WordPress.

Núcleo do WordPress

Em seguida, o núcleo do WordPress precisa suportar PHP 8.0. O projeto WordPress tem um longo histórico de compatibilidade com novas versões do PHP no momento em que são lançadas. De acordo com este post bem escrito no Make WP, o WordPress tem “compatibilidade beta” com o PHP 8.0 desde o lançamento do WordPress 5.6 em dezembro de 2020.

O que significa “compatibilidade beta”? Isso significa que o WordPress pode funcionar bem no PHP 8.0, mas recursos como declarar tipos restritos nos arquivos principais do WordPress ou usar parâmetros nomeados com funções principais do WordPress não são suportados.

Plugins de terceiros

O WordPress tem dezenas de milhares de plugins e o nível de suporte para PHP 8.0 varia muito. Por exemplo, palavras recém-reservadas ainda podem ser usadas por um plugin, ou parâmetros que estão sendo passados ​​para funções nativas do PHP podem não ser do tipo que é esperado agora. Como tal, plugins de terceiros podem ser uma área em que as incompatibilidades com o PHP 8.0 podem afetar seu aplicativo.

Abaixo, você pode aprender como verificar algumas dessas incompatibilidades. As opções incluem pedir ao indivíduo/equipe upstream para fazer as correções e fazer uma nova versão, ou ter uma equipe de desenvolvimento interna ou uma agência, como um de nossos parceiros em destaque , bifurcar o plug-in e fazer as correções por conta própria.

Plug-ins personalizados

Como plugins de terceiros, eles também precisam ser verificados quanto à compatibilidade. Pedir aos desenvolvedores originais que resolvam os problemas descobertos geralmente é o melhor curso de ação.

Temas de terceiros ou personalizados

Embora os plug-ins sejam a fonte mais provável de problemas de compatibilidade, não esqueça que os temas personalizados e de terceiros também precisam ser compatíveis com o PHP 8.0. A mesma abordagem de verificar a compatibilidade do código do plug-in se aplica ao código do tema.

Como encontrar problemas de compatibilidade do PHP 8.0

Existem quatro abordagens principais que as equipes de desenvolvimento podem usar para revisar o código e determinar problemas de compatibilidade:

  • Use PHP_CodeSniffer com o padrão PHPCompatibility.
  • Aborde os avisos PHP conhecidos que são erros fatais do PHP no PHP 8.0.
  • Crie testes automatizados.
  • Use PHPStan/Salmo ou outra ferramenta de análise estática.

Use PHP_CodeSniffer com o padrão PHPCompatibility

PHP_CodeSniffer (PHPCS) tokeniza arquivos PHP e detecta violações de um conjunto definido de padrões de codificação. Existem pacotes para os Padrões de Codificação do WordPress (que incentivamos os clientes a usar).

Existem também pacotes chamados PHPCompatibility e PHPCompatibilityWP , e esses padrões analisam uma base de código para compatibilidade entre versões do PHP.

Como os resultados dependem dos recursos e da prontidão da ferramenta, é essencial usar a developramificação do PHPCompatibility até que a versão 10 seja lançada. A versão 10 conterá os sniffs relacionados à compatibilidade do PHP 8.0 (e PHP 8.1). Consulte nossos documentos para obter instruções sobre como definir sua configuração para usar a developramificação. Depois que a versão 10 for lançada, você poderá usar essa versão.

O pacote PHPCompatbilityWP se baseia no pacote PHPCompatibility, mas desativa algumas verificações para os itens de compatibilidade com versões anteriores que o núcleo do WordPress contém.

Com PHPCS e PHPCompatibility/PHPCompatibilityWP configurados, você pode executar uma verificação:

[dt_code]phpcs –standard=PHPCompatibilityWP –severity=1 –runtime-set testVersion 8.0- –extensions=php[/dt_code]

Pode ser um único plugin ou tema personalizado ou de terceiros, se você quiser começar pequeno, ou todo o repositório, se quiser ver todas as violações que precisam ser investigadas e tratadas.

As etapas de verificação não detectarão todos os possíveis problemas de compatibilidade de versão do PHP (como tipos de valor de tempo de execução incorretos), mas ajudarão a identificar os problemas mais comuns relacionados à sintaxe.

Temos um conteúdo que tratamos de Aceleradores PHP: Quais são os melhores e como ativá-los, confira lá!

Aborde os avisos PHP conhecidos que são erros fatais do PHP no PHP 8.0

O PHP 8.0 viu alguns avisos de mecanismo reclassificados , onde os avisos se tornaram fatais Error e TypeError Exceptions (e alguns avisos se tornaram avisos). Os textos de Aviso do PHP para procurar no PHP 7.4 são:

  • Attempt to assign property ‘*’ of non-object
  • Attempt to modify property ‘*’ of non-object
  • Attempt to increment/decrement property ‘*’ of non-object
  • Creating default object from empty value
  • Cannot use a scalar value as an array
  • Cannot add element to the array as the next element is already occupied
  • Cannot unset offset in a non-array variable
  • Only arrays and Traversables can be unpacked
  • Invalid argument supplied for foreach()
  • Illegal offset type
  • Illegal offset type in isset or empty
  • Illegal offset type in unset
  • Cannot assign an empty string to a string offset
  • Division by zero
  • Use of undefined constant *

A correção desses avisos é essencial para que o aplicativo seja compatível com o PHP 8.0.

Nota: Existem outros erros fatais no PHP 8.0 que nem mesmo eram um Aviso no PHP 7.4. Exemplos incluem:

  • Métodos privados não podem ser declarados finais, exceto para o construtor.
  • Assinaturas inválidas para métodos mágicos.
  • Validação de assinatura do método de traço abstrato
  • Usando parent::com uma classe pai.
  • Assinaturas de métodos sobrecarregados incompatíveis (princípio de substituição de Liskov)

Abordar essas mudanças conhecidas é um bom ponto de partida. TypeError será lançado consistentemente para todas as funções internas do PHP, por exemplo, quando tipos de parâmetros inválidos são passados, mesmo quando a verificação de tipo estrita não é declarada.

Além disso, observe que o @operador não silenciará mais erros fatais no PHP 8.0.

Naturalmente, seu aplicativo deve, idealmente, não produzir erros, avisos e avisos. Você é encorajado a abordar qualquer um que encontrar. Alguns Avisos do PHP no 8.x serão erros fatais no PHP 9.0, por exemplo, potencialmente resultando em lógica incorreta no PHP 8.x.

Construir no tempo de desenvolvimento pré e pós-lançamento para corrigir esses problemas e aqueles que “escapam da descoberta” durante o desenvolvimento é uma prática recomendada. É também um investimento na estabilidade do site e em sua capacidade de atender com precisão aos critérios de aceitação do recurso associado.

Crie testes automatizados

Existem muitos tipos diferentes de testes automatizados, mas aqui queremos dizer:

  • Testes de unidade — simula qualquer função ou classe definida pelo WordPress e não precisa que uma instância de um banco de dados esteja disponível para executar os testes.
  • Testes de integração — carrega o WordPress e usa um banco de dados de teste real
    Este tópico é muito grande para cobrir bem aqui, mas há algumas coisas a serem consideradas:
  • Os resultados dependem da integridade do conjunto de testes. Se você não tiver muitos testes, não terá a cobertura necessária para garantir a compatibilidade.
  • Use afirmações estritas. Por exemplo, using assertEquals()faz uma comparação frouxa, enquanto assertSame()também verifica o tipo.
  • Use cobertura de código estrita. Adicione beStrictAboutCoversAnnotations=”true” e forceCoversAnnotations=”true” ao arquivo de configuração PHPUnit e, em seguida, use @coversanotações para encontrar o nível preciso de cobertura de código internacional nos testes.
  • Teste caminhos felizes (comportamento com base em entradas esperadas) e infelizes (comportamento com base em entradas inesperadas) para garantir que as funções falhem da maneira esperada, pois é onde ocorrem a maioria dos problemas relacionados ao rigor.
  • Execute seus testes no PHP 8.0. Para os testes de integração (WordPress), foram feitas alterações em 2021 no conjunto de testes principal do WordPress que foi desbloqueado usando as versões posteriores do PHPUnit, que por sua vez suporta PHP 8.0. Isso é suportado pelo pacote WP Test Utils , que inclui PHPUnit Polyfills , suporte a Brain Monkey e Mockery , stubs de funções adicionais para funções do WordPress e acesso a todos os utilitários de teste nativos do WP, como os métodos de fábrica para criação de conteúdo.
  • Considere escrever testes antes de tentar uma correção, para ter mais certeza de que a alteração de compatibilidade foi bem-sucedida.

Use PHPStan/Salmo ou outra ferramenta de análise estática

Embora o PHPCS detecte algumas incompatibilidades, existem algumas alterações de tempo de execução que o PHPCS não foi projetado para detectar. Um exemplo que seria esquecido é que as funções nativas do PHP são mais restritas com quais tipos podem ser passados ​​como parâmetros.

Uma ferramenta como PHPStan , Psalm ou outra ferramenta de análise estática pode ajudar aqui. Mas, para serem mais eficazes, eles exigem que sua base de código use tipos estritos (tipos de parâmetro e de retorno no código) ou seja documentado corretamente ( @parame @returnlinhas em DocBlocks).

Essas ferramentas geralmente têm níveis de regras que permitem corrigir primeiro os problemas de nível mais baixo e, em seguida, integrar gradualmente a ferramenta ainda mais para melhorar a qualidade de sua base de código.

Você pode adicionar conhecimento para tipos de código principal do WordPress por meio de extensões como phpstan-wordpress e psalm-plugin-wordpress .

Uma vez configurado, cada execução destacará onde você está passando tipos inesperados para funções, o que pode fazer com que exceções fatais de TypeError sejam lançadas. Cada um deles precisará ser corrigido.

Em muitos casos, você pode suprimir uma exceção TypeError por meio do uso de blocos try-catch ou typecasting. No entanto, recomendamos fortemente que você não faça isso. Corrigir a causa raiz levará a um código mais forte, menos frágil e propenso a erros, e quase sempre valerá a pena a longo prazo.

E o PHP 8.1?

Nossa hospedagem especializada em WordPress já tem suporte para o PHP 8.1. Há menos mudanças entre PHP 8.0 e PHP 8.1 do que entre PHP 7.4 e 8.0, o que significa que deve haver menos incompatibilidades para resolver.

PHP 8.1:

  • Tem suporte ativo dos desenvolvedores principais do PHP até novembro de 2023 e suporte de segurança até novembro de 2024.
  • Pode lidar com mais solicitações por segundo que o PHP 8.0.
  • Tem suporte para “compatibilidade beta” no WordPress 5.9 e superior – isso significa que existem alguns avisos de descontinuação em preparação para o PHP 9, mas não afeta o comportamento do núcleo do WordPress.

Conclusão sobre PHP 8.0

As alterações úteis necessárias para o PHP 8.0, como o uso de código estritamente tipado e a adição de testes automatizados, ajudarão no lançamento do PHP 8.1, bem como nas atualizações do WordPress 6.1, 6.2, 6.3 e posteriores, bem como em qualquer lançamento de recursos que você fizer.

O processo de controle de qualidade geralmente é o gargalo, portanto, usar algumas das ferramentas e abordagens que descrevemos pode reduzir o trabalho manual e dar mais confiança ao implantar essas alterações.

Nós somos Especialistas em WordPress e como o PHP é linguagem de programação no qual o WP é desenvolvido, é importante conhecer e entender a evolução da linguagem como um todo. Conto conosco para seus projetos de WordPress!

Assine nossa Newsletter!

Fique por dentro das últimas atualizações de desempenho do WordPress e da web.
Direto para sua caixa de entrada a cada duas semanas.

Compatilhe este Conteúdo
Postado por Leandro Lopes
Seguir
É especialista em WordPress com mais de 10 anos de experiência no CMS, além de experiência em provedores de hospedagem, banco de dados, front-end e back-end em desenvolvimento web. Trabalhou ou teve participação em projetos ligado à empresas: Hopi Hari, iG, entre muitos outros