Erros depois de passar para o PHP 8: undefined array key, parâmetros nulos e propriedades dinâmicas

Passou o site para o PHP 8 e aparecem mensagens novas. Quase todas vêm do mesmo sítio: o PHP 8 ficou menos tolerante com código descuidado. O que antes era um aviso discreto ou passava calado, agora é um aviso à vista ou um erro que pára a página. Em geral o código que as provoca é de um plugin, de um tema ou de uma biblioteca antiga, e a cura está em actualizá-lo. Esta é a lista das mensagens mais vistas, o que querem dizer e como lidar com elas. Os números das versões vêm da documentação pública do PHP.

As mensagens, uma a uma

A mensagem Desde Quer dizer O que fazer
Warning: Undefined array key "x" 8.0 O código lê uma posição de uma lista que não existe (no PHP 7 era “Undefined index”, um aviso mais discreto). Quem programa verifica antes (isset ou ??). Um plugin: actualize-o.
Warning: Undefined variable $x 8.0 Usa-se uma variável que nunca foi definida. O mesmo. É um descuido do código, quase nunca grave.
Uncaught TypeError: Unsupported operand types: string * int 8.0 Fez-se uma conta com um texto vazio ou não numérico. Converter ou validar o valor antes da conta. Pára a página.
TypeError: count(): Argument #1 must be of type Countable|array, null given 8.0 Contou-se algo que não existe. Garantir que é uma lista antes de contar.
Deprecated: Passing null to parameter #1 ($string) of type string is deprecated 8.1 Passou-se um valor nulo a uma função que pede texto. Usar um texto vazio no seu lugar. Não pára a página.
Deprecated: Return type of ... should either be compatible with ... ReturnTypeWillChange 8.1 Uma classe antiga não declara o tipo que o PHP agora espera. Actualizar a biblioteca. Não pára a página.
Deprecated: Creation of dynamic property Classe::$x is deprecated 8.2 O código cria uma propriedade num objecto sem a declarar na classe. Declarar a propriedade na classe. Não pára a página.

Passo a passo

1 Descubra de onde vem. A mensagem traz o caminho do ficheiro. Se está em wp-content/plugins/nome ou themes/nome, o código é desse plugin ou tema. Veja onde está o registo de erros do PHP.
2 Actualize o que é seu para actualizar. Quase sempre existe uma versão que já corrigiu o problema. Veja actualizar temas e plugins sem partir nada.
3 Se não há actualização, o plugin está abandonado. Procure uma alternativa. Voltar a um PHP antigo é um remédio de curto prazo.
4 Se o código é seu, corrija o que a mensagem diz. Ela aponta a linha.
5 Se a página parou (um erro, e não um aviso), volte temporariamente à versão anterior em Select PHP Version e corrija com calma. Veja mudar a versão do PHP sem partir o site.
Esconder os avisos não os corrige. Calar as mensagens no ecrã é razoável num site público, mas o aviso é um sinal de que o código pode falhar noutros casos. Veja avisos do PHP no site: o que são e como os silenciar. Os “Deprecated” podem nem aparecer no registo, porque a configuração de origem não os regista.
Um PHP antigo é uma dívida. Voltar atrás resolve hoje, mas deixa o site numa versão que deixa de receber correcções de segurança. Use o tempo ganho para actualizar. Veja que versão do PHP deve usar.

Uma mensagem de PHP 8 que não consegue ligar a um plugin ou a uma linha? Envie-nos a mensagem completa e o endereço da página.

Abrir um pedido de suporte

VEJA TAMBÉM

Que versão do PHP deve usar no seu site

Mudar a versão do PHP sem partir o site

Avisos do PHP no site: o que são e como os silenciar

Onde está o registo de erros do PHP

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 9.000,00 Kz/mês

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?