5

As melhores novidades do PHP 8

#Programação para Internet #Laravel #PHP
José Antonio
José Antonio

A versão 8 do PHP saiu do forno no dia 3 de dezembro de 2020 não apenas para quebrar sua aplicação, como também para trazer muitas novidades interessantes.


Porém, antes de começarmos, gostaria de deixar claro que este artigo irá retratar a minha opinião pessoal sobre as novidades do PHP 8. Minha intenção não é fazer uma lista completa com todas elas, mas sim expor as que me deixaram mais empolgado, combinado? Sem mais delongas, vamos lá!


Pequenas grandes novidades


Vamos começar pelas pequenas mudanças. Eu sei, parece besteira... Mas no dia a dia, elas vão ser uma mão na roda!


Chega de if !== null


Finalmente vamos aposentar aquele monte de condições de verificação de nulos. Agora vamos transformar, com o novo operador nullsafe, isso:


if ($session !== null) {
    $user = $session->user;


    if ($user !== null) {
        $address = $user->getAddress();


        if ($address !== null) {
            $country = $address->country;
        }
    }
}


Nisso:


$country = $session?->user?->getAddress()?->country;


Confesso que só com essa novidade eu já iria aplaudir muito essa nova versão do PHP. Mas calma, tem muito mais por vir!


Vírgula no final de tudo


Lá no PHP 7 já era possível deixar vírgula no final de uma array, como nesse exemplo:


$fruits = [
    "avocado",
    "banana",
    "blackberries",
];


Agora, com o PHP 8, é possível fazer isso com os parâmetros de métodos e funções:


$conn = new PDO(
    $dsn,
    $user,
    $pass,
);


Declaração de propriedades no construtor


Esse outro açucarzinho sintático permite que em uma classe você, em vez de ter que especificar as propriedades e o construtor separadamente, possa criá-la mais rapidamente declarando as propriedades no construtor. Olha só, em vez disso:


class Money
{
    public Currency $currency;


    public int $amount;


    public function __construct(
        Currency $currency,
        int $amount,
    ) {
        $this->currency = $currency;
        $this->amount = $amount;
    }
}


Você agora pode fazer isso:


class Money
{
    public function __construct(
        public Currency $currency,
        public int $amount,
    ) {
    }
}


Falando em classes


Agora o ::class está disponível também para objetos. Então, em vez de ficar utilizando o get_class() nos seus objetos, basta apenas fazer isso para pegar o nome da classe:


$myObject = new MyClass();
var_dump($myObject::class);


Agora, as que vão mudar o jogo


Nem todas as novidades do PHP 8 são "supérfluas" como as que comentei até agora. Algumas vão realmente mudar o jogo!


Os catches agora não precisam capturar algo


Não interessa se você queria ou não: antes do PHP 8 você tinha que armazenar a exception em uma variável.


try {
    // Deu ruim!
} catch (MyException $exception) {
    Log::error("Acho que deu ruim");
}


Agora você pode simplesmente omitir a variável que está tudo bem. Sem problemas! Olha como fica melhor sem uma variável que não iria ser utilizada:


try {
    // Deu ruim!
} catch (MyException) {
    Log::error("Acho que deu ruim");
}


Lembrando que ainda é necessário definir o tipo - não tem como deixar o catch vazio. Precisa, pelo menos, usar Throwable.


Os novos amigos das strings


Chega de strpos() e aquelas expressões regulares doidas que você precisa usar para validar ou tratar uma string. Agora temos a str_contains(), str_starts_with() ou a str_ends_with().


Essas belezinhas, com certeza, vieram para facilitar a nossa vida!


Vida longa e próspera ao JIT


É quase impossível falar de PHP 8 e não comentar desse meninão. A compilação Just In Time deve melhorar bastante a performance de algumas aplicações.


Antes do PHP 8, o PHP executava códigos convertendo tudo em instruções (opcodes) para a máquina virtual. Com o compilador JIT, o PHP vai converter o código para linguagem de montagem x86 que, por sua vez, é executada diretamente no processador.


Isso vai impactar você? Talvez. Não adianta querer aquela baita evolução que foi pular do PHP 5 para o 7. Quem vai sentir mais diferença nesse tipo de compilação é quem trabalha com muitos e muitos cálculos matemáticos e não o público geral. Mas, mesmo assim, a melhoria é muito bem-vinda!


União de tipos


Agora, em vez de usar apenas anotações PHPDoc para uma combinação de tipos, vamos poder utilizar declarações de união de tipos nativa que são validados em tempo de execução. O que antes ficava assim:


class Number
{
    /** @var int|float */
    private $number;


    /**
     * @param float|int $number
     */
    public function __construct($number)
    {
        $this->number = $number;
    }
}


new Number('NaN'); // Ok


Agora vai ficar assim:


class Number {
  public function __construct(
    private int|float $number
  ) {}
}

new Number('NaN'); // TypeError


Tá achando que PHP ainda é bagunça? Pode parar! A coisa ficou séria.


Throw agora é uma expressão


Tirar o Throw de uma declaração e colocá-lo como uma expressão ficou simplesmente maravilhoso. Vai ser lindo usar Throw em arrow functions ou ternários, olha esse exemplo:


$condition || throw new Exception();


Corram para as colinas


Nem tudo são flores! Como eu disse no começo do artigo, o PHP 8 chegou para, quem sabe, quebrar a sua aplicação. Tudo que estava descontinuado antes foi completamente removido dessa nova versão.


Chamadas estáticas de métodos não-estáticos agora é erro fatal


No PHP 7 já tinhamos um erro ao fazer isso:


class MyClass
{
    public function myMethod()
    {
        //...
    }
}
MyClass::myMethod();


Agora não tem choro nem vela. É erro fatal!


Operador @


Lembra dele? Sim, o senhor das gambiarras. O mestre silenciador de erros. Pois é, ele não vai mais silenciar tanto os erros assim. Erro fatal agora passa, boa sorte!


Novo nível padrão de relatório de erros


Então, essa é mais uma para o terror das gambiarras. O valor E_ALL vai vir por padrão na configuração do PHP. Chega de esconder essas nojeiras aí!


Erros e mais erros


O PHP 8 vai transformar várias coisas que eram apenas avisos e alertas em erros. Aqui vão alguns deles:


  • variáveis indefinidas
  • índice de array indefinidas
  • divisão por zero


“RIP in Peace” gambiarras.


Conclusão


Como é dito naquela música do Daft Punk: "Harder, better, faster, stronger". Essa é a descrição perfeita para o PHP 8. Mais sólido, melhor, mais rápido e mais poderoso. Além disso, parece que estamos dando o primeiro passo para tornar o PHP uma linguagem type-safe.


Enfim, agora é só correr para o abraço! Ele já está disponível para todos aproveitarem essas e outras vantagens. Espero que tenham gostado do meu primeiro artigo aqui no DIO :)

1
42

Comentários (1)

0
⚡Eros Lima

⚡Eros Lima

28/01/2021 17:47

Completo ★★★★★ (5), parabéns, eu ainda não pude ler toda documentação mas tu deve ter resumido no mínimo mais de 50% das novas features, thanks for sharing e Congrats pelo seu primeiro artigo, eu vou pensar bem antes de publicar algo pois o seu artigo me inspirou, pois muitos só fazem pots (de pouca utilidade, que ocupam espaço), mas tu preencheu com muita informação útil, Parabéns.


#GoGoGo 🚀 🚀 🚀


Tech Lead @ Performma Online

Brasil