PHP 8.2: O que Esperar (Guia do Desenvolvedor – Atualizado)

by Jason Cosper
PHP 8.2: O que Esperar (Guia do Desenvolvedor – Atualizado) thumbnail

Espera-se que o PHP 8.2 seja lançado em novembro deste ano, com a versão estável mais recente sendo o PHP 8.1.5. Embora ainda esteja no início do processo, houve uma recepção mista em relação ao PHP 8.2 e à compatibilidade do núcleo do WordPress, plugin e tema.

Contudo, saber o que esperar pode ajudá-lo a preparar-se para a última versão do PHP. Ao aprender sobre as novas funcionalidades e as que estão sendo descontinuadas, você pode entender como a atualização pode afetar o desenvolvimento. Esse conhecimento também pode ajudá-lo a se preparar para o lançamento eventual.

Neste post, vamos recapitular as versões mais recentes do PHP. Em seguida, abordaremos as novidades do PHP 8.2 e discutiremos o cronograma de lançamento. Vamos lá!

Visão Geral das Versões do PHP

PHP é a linguagem de programação principal do WordPress. Desempenha um papel vital na conversão de dados do seu banco de dados em páginas web HTML para os visitantes do seu site.

Como proprietário ou desenvolvedor de sites, você provavelmente já está familiarizado com a importância de manter o núcleo do WordPress, temas e plugins atualizados. No entanto, também é essencial manter seu PHP atualizado.

Atualmente, o WordPress recomenda o uso de pelo menos PHP 7.4. Versões mais antigas de PHP não recebem mais suporte ativo para atualizações de segurança e correções de bugs. Portanto, atualizar para a versão estável mais recente do PHP pode resultar em melhor segurança do site, desempenho aprimorado e níveis mais altos de suporte (enfatizamos estável porque uma parte dos mais de 60.000 Plugins/plugin do WordPress ainda não é totalmente compatível com o PHP 8.0, então é uma boa ideia abordar essas atualizações com alguma cautela).

PHP 7.4 introduziu propriedades tipadas, um separador numérico sublinhado e várias melhorias. Desde então, houve mais algumas iterações do PHP lançadas.

PHP 8.0, lançado em novembro de 2020, trouxe uma série de funcionalidades essenciais. Além de melhorias na sintaxe e performance, o lançamento incluiu:

  • Parâmetros nomeados
  • Sintaxe de correspondência
  • Tipos de união
  • Promoção de Propriedade de Construtor
  • JIT (que afeta como o PHP executa o código fonte)

Um ano depois veio o PHP 8.1, a última versão principal do PHP. Esta atualização inclui funcionalidades significativas, como:

  • Tipos de interseção
  • Propriedades somente leitura
  • Enums
  • Fibras
  • Tipo de retorno never

Manter-se atualizado com as últimas versões do PHP pode ajudar a aumentar a performance e a segurança do seu site. No entanto, é importante saber quais alterações esperar antes de fazer o upgrade. Se você estiver interessado em testar o estado atual do PHP 8.2, pode fazê-lo via GitHub.

Novidades no PHP 8.2

PHP 8.2 deve ser lançado até o final de 2022. Aqui está o cronograma de lançamento atual, com Disponibilidade Geral (GA) programada para 24 de novembro de 2022:

  • 9 de junho: Alpha 1
  • 23 de junho: Alpha 2
  • 7 de julho: Alpha 3
  • 19 de julho: Congelamento de funcionalidades
  • 21 de julho: Beta 1
  • 4 de agosto: Beta 2
  • 18 de agosto: Beta 3
  • 1 de setembro: Candidato a lançamento 1
  • 15 de setembro: Candidato a lançamento 2
  • 29 de setembro: Candidato a lançamento 3
  • 13 de outubro: Candidato a lançamento 4
  • 27 de outubro: Candidato a lançamento 5
  • 10 de novembro: Candidato a lançamento 6
  • 24 de novembro: Disponibilidade Geral

De acordo com a documentação oficial no site do PHP, deverá haver várias novas funcionalidades e funções obsoletas. Vamos dar uma olhada em algumas delas!

Tipos de Forma Normal Disjuntiva (DNF)

PHP 8.2 irá introduzir uma nova funcionalidade de tipos em Forma Normal Disjuntiva (DNF). DNF é uma maneira padronizada de organizar expressões booleanas — especificamente, em uma série de ANDs ORed. Quando o DNF é aplicado a declarações de tipo, ele possibilita uma maneira padrão de escrever tipos de União e Intersecção combinados que o analisador pode manipular.

Nova Função mysqli_execute_query e Método mysqli::execute_query

Executar consultas MySQLi parametrizadas será mais fácil no PHP 8.2, graças à nova função mysqli_execute_query($sql, $params) e ao método mysqli::execute_query.

Isso reduzirá ainda mais a complexidade do uso de consultas parametrizadas, o que facilitará para os desenvolvedores se afastarem de mysqli_query() assim como da perigosa/arriscada fuga de valores de usuário.

Buscar propriedades de enum em expressões const

De acordo com a RFC, “Esta RFC propõe permitir o uso de ->/?-> para buscar propriedades de enums em expressões constantes. A motivação principal para esta mudança é permitir a busca das propriedades de nome e valor em locais onde objetos enum não são permitidos, como chaves de array.”

Nova Extensão Aleatória

PHP 8.2 introduz uma nova extensão PHP chamada random. Ela organiza e consolida a funcionalidade existente do PHP relacionada à geração de números aleatórios. Também introduz uma série de estruturas de classes PHP e classes de exceção para fornecer opções granulares para geradores de números aleatórios e tratamento de exceções.

A extensão random é fornecida com o PHP, e não há opção de configuração em tempo de compilação ou execução para desativar a extensão random. A extensão random estará sempre disponível no PHP 8.2 e posteriores.

Nova Função curl_upkeep

PHP 8.2 adiciona uma nova função à extensão Curl chamada curl_upkeep. A função curl_upkeep chama curl_easy_upkeep() no libcurl, que é a biblioteca C subjacente que a extensão PHP Curl utiliza.

A função curl_upkeep() faz o trabalho que mantém uma conexão Curl viva. No entanto, nem todos os tipos de conexão que o Curl integra suportam a manutenção da conexão. Atualmente, apenas as conexões HTTP/2 a suportam.

Nova função ini_parse_quantity

ini_parse_quantity é uma nova função que será adicionada ao PHP na versão 8.2. Ela analisa qualquer tamanho de dados reconhecido pelos valores INI do PHP (como 56K, 256M ou 1G), e então retorna o tamanho dos dados em bytes. Pode ser útil ao analisar valores INI existentes ou fornecidos em uma aplicação PHP. No entanto, ela não reconhece sufixos IEC para tamanhos de dados como MB, MiB ou GB, e não é adequada para converter valores de tamanho de dados padrão para bytes.

Nova função memory_reset_peak_usage

PHP 8.2 incluirá uma nova função chamada memory_reset_peak_usage. Ela irá reiniciar o uso máximo de memória retornado pela função memory_get_peak_usage.

Esta função será útil para casos que envolvem invocar uma ação várias vezes e registrar o uso máximo de memória de cada iteração. Os desenvolvedores poderão usar este novo recurso para redefinir o uso máximo de memória em qualquer ponto durante a vida útil da solicitação.

Receba conteúdo diretamente na sua caixa de entrada

Inscreva-se agora para receber todas as últimas atualizações, diretamente na sua caixa de entrada.

Classes Somente Leitura

Introduzidas no PHP 8.1, as propriedades readonly serão expandidas no PHP 8.2 para adicionar açúcar sintático de modo que todas as propriedades de classe sejam readonly de uma só vez:

readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
}

Isso impedirá que propriedades dinâmicas sejam adicionadas às classes.

Tipos Autônomos Null, True e False

No PHP 8.2, o tipo de retorno false estará disponível como um tipo isolado em vez de estritamente um tipo de união para quando ocorrer um erro, o que já é possível:

function alwaysFalse(): false
{
return false;
}

O mesmo se aplica ao tipo nulo. Por exemplo, como um tipo independente, ao contrário de antes, NullPost::getAuthor() será capaz de retornar apenas null.

PHP 8.2 também permite true como um tipo autônomo.

Descontinuar Propriedades Dinâmicas

Propriedades dinâmicas serão depreciadas no PHP 8.2, resultando em uma ErrorException pelo PHP 9.0. Essas propriedades são definidas em um objeto:

class Post
{
public string $title;
}

// …

$post->name = 'Nome';

As propriedades dinâmicas permitem flexibilidade ao criar classes (por exemplo, objetos de valor) sem uma declaração de classe estrita. Sua depreciação provavelmente será um problema para desenvolvedores que dependem de propriedades dinâmicas porque os empurrará mais para a análise estática. Por essa razão, alguns desenvolvedores estão apreensivos com essa mudança no PHP 8.2.

Entretanto, classes que usam __get e __set ainda suportarão propriedades dinâmicas, assim como objetos do stdClass.

Alternativamente, os desenvolvedores podem usar o novo #[AllowDynamicProperties]attribute, declarado no namespace global, em classes para essas propriedades:

#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar';

Embora não seja recomendado, outra opção é desativar os avisos de depreciação.

Novo Modificador /n

PHP 8.2 incluirá suporte para o modificador /n (sem captura) para a família de funções preg_*. Quando utilizado, quaisquer grupos com meta-caracteres () não capturarão, exceto pelos grupos capturados que são nomeados. Essencialmente, o resultado é o mesmo que marcar cada grupo como não capturador.

A razão por trás dessa mudança é que o modificador simplifica expressões regulares complexas para múltiplos grupos. Em vez de marcar cada grupo como não capturador, os desenvolvedores podem marcar todos os grupos como não capturadores. Em seguida, eles podem selecionar e nomear grupos específicos que precisam capturar.

Redigir Parâmetros em Rastreamentos

Muitos desenvolvedores usam serviços que rastreiam pilhas de chamadas e erros de produção em bases de código. Esses serviços podem notificar os usuários se e quando algo der errado. Por exemplo, rastrear pilhas de chamadas é útil ao depurar uma aplicação.

Entretanto, às vezes os rastreamentos de pilha podem conter informações sensíveis, como nomes de usuário e senhas. O PHP 8.2 incluirá um atributo #[SensitiveParameter] que impedirá que essas informações sejam incluídas nos rastreamentos de pilha quando ocorrerem problemas:

function test(
$foo,
#[SensitiveParameter] $bar,
$baz
) {
throw new Exception('Erro');
}

test('foo', 'bar', 'baz');

O PHP 8.2 usará os parâmetros sensíveis para redigir informações privadas das rastreamentos de pilha, tornando-os mais seguros. Esses parâmetros garantem que os dados não acabem em registros de erros. Observe que esse atributo só estará disponível para uso em parâmetros.

Descontinuar a Interpolação de String ${}

Existem várias maneiras de incorporar variáveis em strings com PHP. No entanto, o PHP 8.2 irá descontinuar dois métodos. O primeiro é usando ${} em strings:

"Olá ${world}";

O segundo é usando ${} (variáveis variáveis):

"Olá ${(world)}";

Isso provavelmente não será um problema significativo para os desenvolvedores, pois os dois métodos de interpolação de strings mais populares ainda funcionarão.

Descontinuar Callables Parcialmente Suportados

Outra mudança obsoleta será com callables parcialmente suportados. Há várias maneiras de criar um callable em PHP. Ele pode ser chamado com ou sem parâmetros com a sintaxe $callable(), o user_call_func(/a_array), ou usando uma função com um callback.

Os padrões de chamadas obsoletos incluem o seguinte:

$callable = "self::method";
$callable = "parent::method";
$callable = "static::method";
$callable = ["self", "method"];
$callable = ["parent", "method"];
$callable = ["static", "method"];
$callable = ["MyClass", "MyParentClass::myMethod"];
$callable = [new MyClass(), "MyOtherClass::myMethod"];

A partir do PHP 8.2, chamar qualquer um dos itens acima resultará no seguinte aviso de descontinuação:

class Test {
public static function myMethod(): void {
echo "Called";
}
public static function call(): void {
$callable = 'self::myMethod';
call_user_func($callable);
}
}
$callable = Test::call();
// "Chamado";

No entanto, passar esses callables para a função is_callable ou usá-los com os tipos de parâmetro callable não gerará a mensagem de depreciação. Para evitar o aviso de depreciação, os desenvolvedores podem, em vez disso, converter as palavras-chave parent, self e static em código callable para os respectivos nomes de classe usando o método mágico::class.

Parte da razão por trás da mudança é permitir que chamáveis sejam usados para propriedades tipadas. Isso as torna menos dependentes de contexto.

MySQLi não pode mais ser compilado com libmysql

No passado, o PHP suportou duas bibliotecas para conectar a bases de dados MySQL: mysqlnd e libmysql. A partir do PHP 5.4, a primeira tem sido a biblioteca padrão. No entanto, tem sido possível compilar o MySQLi através de extensões.

A partir do PHP 8.2, compilar uma extensão MySQLi com libmysql não será suportado. Tentar fazê-lo resultará em um erro de configuração:

./configure --with-mysqli=FOO

A vinculação do mysqli com bibliotecas externas não é mais suportada

Isso provavelmente não causará erros significativos para desenvolvedores. No entanto, os dois maiores recursos suportados pelo libmysql que não estão disponíveis com mysqlnd são suportados para reconexão automática e autenticação através de LDAP e SASL.

Mantenha Sua Versão PHP do WordPress Atualizada

Como desenvolvedor, é essencial testar seu código com as versões futuras do PHP. Neste caso, os desenvolvedores devem começar a testar seu código com o PHP 8.2 o mais rápido possível para garantir que seu código não prejudique os sites dos usuários quando eles atualizarem.

Imagem de fundo do anúncio

O Ambiente de Desenvolvimento Perfeito

Nós garantimos que seu site seja rápido, seguro e sempre disponível para que seus visitantes confiem em você. Planos a partir de $1.99/mês.

Escolha Seu Plano