PHP 8.4: principais novidades
php
O lançamento do PHP 8.4, programado para 21 de novembro de 2024, promete trazer uma série de melhorias e novas funcionalidades que otimizarão o desenvolvimento, tornando o código mais eficiente e moderno. A partir dessa versão, os desenvolvedores poderão contar com novos recursos que simplificam tarefas comuns e aumentam a performance, além de oferecer um suporte melhorado para criptografia e HTML5.
Você está pronto para as novidades que o PHP 8.4 traz? Com grandes avanços em relação ao PHP 8.3, essa nova versão promete revolucionar a forma como desenvolvemos em PHP. Vamos explorar as principais mudanças e ver como elas podem impactar seu dia a dia como desenvolvedor.
⚠️
No momento deste post, ainda existem RFCs em discussão e em fase de rascunho. Isso significa que o lançamento do PHP 8.4 pode trazer mais novidades além das já confirmadas.

Novas funções para manipulação de arrays

A partir do PHP 8.4, a manipulação de arrays ficou muito mais simples com a introdução de quatro novas funções, que facilitam a busca, verificação e controle de elementos. Comparado ao PHP 8.3, que já oferecia uma boa flexibilidade, essa nova versão torna o código ainda mais enxuto e expressivo.
  • array_find(): Retorna o primeiro elemento de um array que satisfaça uma condição especificada por uma função de callback.
$trilhas = ['DevOps', 'PHP', 'Java']; $result = array_find($trilhas, function ($trilha) { return strlen($trilha) < 4; }); // Resultado: 'PHP'
  • array_find_key(): Retorna a chave do primeiro elemento que atende a uma condição.
$trilhas = ['a' => 'DevOps', 'b' => 'Java', 'c' => 'PHP']; $result = array_find_key($trilhas, fn($trilha) => $trilha === 'PHP'); // Resultado: 'c'
  • array_any(): Verifica se pelo menos um elemento do array atende a uma condição.
$array = [1, 2, 3, 4]; $hasEven = array_any($array, fn($num) => $num % 2 === 0); // Resultado: true
  • array_all(): Verifica se todos os elementos do array satisfazem a condição.
$array = [2, 4, 6, 8]; $allEven = array_all($array, fn($num) => $num % 2 === 0); // Resultado: true
Essas funções substituem a necessidade de loops complexos para validar condições dentro de arrays. Agora podemos escrever um código mais limpo, focando na lógica de negócio em vez de perder tempo com estruturas repetitivas.

Property hooks: controle personalizado de propriedades

Outra grande novidade do PHP 8.4 são os property hooks, que permitem definir comportamentos personalizados para leitura e escrita de propriedades. A partir dessa versão, podemos controlar diretamente como as propriedades são acessadas e alteradas, eliminando a necessidade de métodos get e set tradicionais.

Exemplo de property hooks:

class Estudante { private bool $alterado = false; public function __construct( private string $primeiroNome, private string $ultimoNome ) {} public string $nomeCompleto { get => $this->primeiroNome . ' ' . $this->ultimoNome; set { [$this->primeiroNome, $this->ultimoNome] = explode(' ', $value, 2); $this->alterado = true; } } }
Agora, podemos definir propriedades diretamente dentro das classes, como public string ou private, permitindo maior controle e organização do código.

Benefícios dos property hooks:

  • Código mais enxuto: Ao invés de criar métodos get e set separadamente, toda a lógica de leitura e escrita é encapsulada diretamente na propriedade.
  • Maior flexibilidade: Facilita a criação de propriedades que podem ser de leitura ou escrita, ou ambas, permitindo um controle completo sobre os dados dos objetos.
Essa nova funcionalidade é especialmente útil em sistemas mais complexos que lidam com grande quantidade de dados, como plataformas educacionais que gerenciam perfis de estudantes e trilhas de aprendizado. Agora podemos simplificar esses processos de forma mais eficiente.

Instanciamento de classes sem parênteses

A partir do PHP 8.4, instanciar uma classe e chamar métodos ou acessar propriedades ficou mais simples. Agora, não é mais necessário envolver a instanciação com parênteses, algo que já era comum em linguagens como Java e C#.
Antes do PHP 8.4:
$result = (new MinhaClasse())->meuMetodo();
Com o PHP 8.4:
$result = new MinhaClasse()->meuMetodo();
Com essa nova funcionalidade, agora podemos escrever códigos mais simples e legíveis, economizando tempo e evitando erros de sintaxe.

Melhoria na segurança: hashing com BCrypt

Uma mudança significativa na segurança é o aumento do custo padrão do BCrypt para 12 no PHP 8.4, tornando o processo de hashing mais seguro contra ataques de força bruta.
$hash = password_hash('minha_senha_secreta', PASSWORD_BCRYPT); // Agora com custo padrão de 12
Essa nova configuração torna o hash mais robusto, especialmente em aplicações que lidam com autenticação de usuários. Agora podemos ter maior confiança na proteção das senhas armazenadas.

Suporte ao HTML5 na extensão DOM

O PHP 8.4 também traz melhorias significativas no suporte ao HTML5 na extensão DOM, através da nova classe DOM\\HTMLDocument. A partir dessa versão, podemos manipular documentos HTML5 de forma mais eficiente e precisa.
use DOM\HTMLDocument; $html = '<!DOCTYPE html><html><body><p>Olá, mundo!</p></body></html>'; $documento = HTMLDocument::createFromString($html); $paragrafos = $documento->getElementsByTagName('p'); echo $paragrafos[0]->textContent; // Saída: Olá, mundo!
Benefícios:
  • Compatibilidade com novas tags e atributos do HTML5.
  • Melhora na manipulação do DOM, facilitando o desenvolvimento de aplicações web modernas.

Novas funções multibyte para strings

Com o PHP 8.4, agora podemos contar com novas funções para manipulação de strings multibyte, como mb_trim(), mb_ucfirst(), entre outras. Elas são especialmente úteis para trabalhar com caracteres acentuados e outros caracteres Unicode.
$string = " Olá Mundo "; $trimmed = mb_trim($string); // Resultado: "Olá Mundo"

Vantagens:

  • Suporte a Unicode: Manipulação correta de caracteres especiais, como acentos.
  • Consistência: Funcionalidades semelhantes às funções padrão, mas com suporte a multibyte.
Essas funções permitem que você trate strings com diferentes conjuntos de caracteres de forma mais segura e eficiente, garantindo que a aplicação suporte múltiplos idiomas sem erros.

Criação de DateTime a partir de timestamp Unix

Outra novidade interessante é a adição de uma nova função nas classes DateTime e DateTimeImmutable para facilitar a criação de objetos de data a partir de um timestamp Unix, inclusive com suporte a microsegundos.
$timestamp = 1718337072.432; $data = DateTimeImmutable::createFromTimestamp($timestamp); echo $data->format('Y-m-d H:i:s.u'); // Saída: 2024-06-14 03:51:12.432000

Benefícios:

  • Simplicidade: Menos código necessário para criar objetos de data.
  • Precisão: Agora com suporte a microsegundos, garantindo maior exatidão em operações com data.

Melhorias no compilador Just-In-Time (JIT)

O PHP 8.4 também apresenta uma nova implementação do compilador Just-In-Time (JIT), baseada no IR Framework, o que resulta em melhorias de performance em aplicações que fazem uso intensivo da CPU.

Vantagens:

  • Performance aprimorada: A execução do código PHP é agora mais rápida e eficiente.
  • Melhor uso dos recursos do sistema: O JIT otimiza o uso da CPU, especialmente em operações matemáticas pesadas ou loops intensivos.

Depreciações importantes no PHP 8.4

Tipos nulos implícitos

Utilizar um valor padrão null em um parâmetro tipado sem declará-lo como anulável (?) agora gera uma depreciação no PHP 8.4.
Exemplo que gera aviso:
function salvar(Usuario $usuario = null) { // ... }
Como corrigir:
function salvar(?Usuario $usuario = null) { // ... }
Essa mudança incentiva o uso de tipagem explícita e previne comportamentos inesperados.

Outras melhorias notáveis

  • Novos modos de arredondamento: A função round() agora suporta modos adicionais.
  • Atualizações em bibliotecas internas: Melhorias na biblioteca PCRE2 para expressões regulares e funções como grapheme_str_split() para manipulação avançada de strings.
  • Funções como public function construct private agora permitem melhor controle sobre a visibilidade de construtores em classes.

Conclusão

O PHP 8.4 traz uma série de mudanças significativas que melhoram tanto a performance quanto a segurança das aplicações. A partir dessa versão, podemos contar com novas funcionalidades para manipulação de arrays, property hooks mais flexíveis, suporte aprimorado ao HTML5 e melhorias no hashing com BCrypt, além de um compilador JIT mais eficiente.
Com o lançamento marcado para 21 de novembro de 2024, fique atento para as novas versões pré-lançamento e aproveite para atualizar seu ambiente de desenvolvimento. Agora podemos garantir que sua aplicação esteja pronta para o futuro do PHP!

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA