PHP Moderno: Recursos das Versões 8.x que Você Precisa Usar

andresn
: ~/blog/
$

Se a última vez que você mexeu com PHP foi na época do PHP 5 (ou no início do 7), esqueça tudo o que você lembra. O PHP mudou radicalmente. Com o lançamento do PHP 8.0 e suas atualizações subsequentes (8.1, 8.2, 8.3…), a linguagem ganhou recursos dignos de linguagens modernas como C# e TypeScript.

Hoje, o PHP é rápido, possui tipagem forte opcional e uma sintaxe extremamente limpa. Neste post, vamos dar uma olhada nos recursos mais fantásticos do PHP 8.x que você deveria estar usando agora mesmo.


1. Constructor Property Promotion (Promoção de Propriedades do Construtor)

Sabe quando você criava uma classe e precisava repetir o nome da variável umas quatro vezes apenas para injetar uma dependência? No PHP 8, isso acabou. Você pode declarar e inicializar propriedades diretamente no construtor.

Como era antes:

class UsuarioService {
    private UsuarioRepository $repository;

    public function __construct(UsuarioRepository $repository) {
        $this->repository = $repository;
    }
}

Como é no PHP 8.x:

class UsuarioService {
    public function __construct(
        private UsuarioRepository $repository
    ) {}
}

Uma redução drástica de boilerplate (código repetitivo).

2. O Operador Nullsafe (?->)

Evitar o famoso erro “Call to a member function on null” costumava exigir uma árvore de blocos if. Com o operador Nullsafe, você pode encadear chamadas de métodos. Se qualquer elemento da cadeia for null, a execução para e retorna null sem quebrar sua aplicação.

// Adeus checagens manuais com 'if ($usuario !== null)'
$pais = $usuario?->getPerfil()?->getEndereco()?->pais;

3. Union Types e Readonly Classes

O sistema de tipagem do PHP ficou absurdamente maduro. Com os Union Types, você pode indicar que um parâmetro aceita mais de um tipo de dado.

function processarPagamento(int|float $valor): void {
    // Aceita int ou float
}

Além disso, introduzido no PHP 8.2, você pode marcar uma classe inteira como readonly. Todas as propriedades dela se tornam imutáveis automaticamente após a inicialização, perfeito para DTOs (Data Transfer Objects).

readonly class ConfiguracaoApi {
    public function __construct(
        public string $url,
        public string $token
    ) {}
}

4. A Expressão match

O match é o irmão mais novo, mais inteligente e mais bonito do switch. Ele retorna valores diretamente, faz comparações estritas (===) e não precisa daquela palavra-chave break irritante que, se esquecida, causava bugs silenciosos.

$statusCodigo = 404;

$mensagem = match ($statusCodigo) {
    200, 201 => 'Sucesso!',
    400 => 'Requisição inválida',
    404 => 'Não encontrado',
    default => 'Erro desconhecido',
};

echo $mensagem; // Imprime: Não encontrado

5. Enums (Enumerações)

Disponíveis a partir do PHP 8.1, os Enums finalmente trouxeram uma forma nativa de organizar listas de valores constantes, substituindo o uso de strings soltas ou classes cheias de constantes.

enum StatusPedido: string {
    case Pendente = 'pendente';
    case Pago = 'pago';
    case Cancelado = 'cancelado';
}

function atualizarStatus(StatusPedido $status) {
    // O PHP garante que apenas um dos casos válidos seja passado
}

Conclusão

O PHP moderno é focado em produtividade, segurança de tipos e performance. Ferramentas modernas do ecossistema como Laravel, Symfony e a ferramenta de concorrência Swoole, usam e abusam desses recursos para entregar aplicações robustas que aguentam milhões de acessos.

Se você ainda tem preconceito com o PHP, recomendo abrir o terminal, instalar a versão 8.x mais recente e dar uma segunda chance. Você vai se surpreender.