O que há de novo no PHP 8
O que há de novo no PHP 8

Olá meus amigos, tudo bem?

 

Nesse artigo eu quero mostrar pra vocês as principais novidades do PHP 8, dentre elas uma que achei muito interessante que é a expressão match. O match é bastante interessante e pode substituir o famoso switch em quase todos os casos. Bem vamos lá!

 

Argumentos nomeados RFC

Como o nome sugere, argumentos nomeados permitem passar argumentos para uma função com base no nome do parâmetro, em vez da posição do parâmetro. Veja um exemplo:

 

Em versões anteriores do PHP teríamos algo assim:

my_func($name, $age, $active) { ... }

No PHP 8 isso poderia ser representado assim:


my_func(string $name, int $age, bool $active) { ... }
my_func(age: 36, name: "Juvenal", active: false);

 

Promoção de propriedade de construtor RFC

Usando em conjunto com argumentos nomeados, podemos ter algo assim:


class Person
{
    public __construct(
        public string $name,
        public int $age,
        public bool $active
    ) { }
}

Já deu pra perceber a beleza ali né? Caso não, já estou preparando um artigo falando mais a fundo sobre cada um dos itens que estou trazendo nesse artigo, só ficar ligado.

 

Operador nullsafe RFC

Bem, pra explicar essa nada melhor que um exemplo:


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

O trecho de código acima pode ser escrito da seguinte forma no PHP 8:

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

Basicamente está sendo feito a mesma coisa que o trecho de código anterior, ou seja, a cadeia de chamadas será testada, quando uma falhar, toda a cadeia falhará e retornará (será avaliada como) nulo.

 

Expressão match RFC

Eu tive contato com uma expressão match enquanto usava a Godot Engine, pelo que pude ver são muitíssimo semelhantes, mas vamos ver um pouco (breve) sobre ela aqui.

 

Match é uma expressão, isso que dizer que ela retorna um valor, esse valor pode ser armazenado em uma variável, por exemplo.

 

Match (até o momento) suporta apenas expressões de linha e não precisa do break. Lembra quando disse no início do artigo que o match substitui o switch em quase todos os cenários?

 

Match faz comparações estritas. Sabe o que isso significa, certo? Caso não, estou preparando um artigo só pra falar do match também.

Vamos ver um exemplo:

 

Em versões anteriores do PHP teríamos o seguinte:


switch (10)
{
    case '10':
        $result = 'STR 10';
        break;
    case 10:
        $result = 'INT 10';
        break;
}
echo $result; // STR 10

Já no PHP 8:


echo match (10)
{
    '10' => 'STR 10',
    10 => 'INT 10',
}
// INT 10

Percebem a diferença? Além do mais, esse exemplo também demonstra a comparação estrita feita pela match.

 

Acho que é isso, existem outras novidades, como comparações entre strings e números mais inteligentes no PHP8, o JIT está mais rápido, união de tipos, atributos, erros mais consistentes para funções internas, além de novas classes, interfaces, funções, etc. Mas isso fica pra outro artigo. Uma abraço e até a próxima.