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.