Principais Novidades do PHP 7.4

27 de julho de 2022
Ronaldo B.

O PHP 7.4 foi lançado em novembro de 2019 e trouxe mudanças que deixaram o PHP ainda mais robusto. Neste artigo veremos as principais novidades desta nova versão e analisar em quais situações elas poderão nos ajudar.

Tipagem de dados em atributos

O PHP é conhecido por ser uma linguagem fracamente tipada, ou seja, não nos obriga a definir o tipo de uma variável ao criá-la nem nos impede de mudar o tipo dessa variável se desejarmos.

Contudo, a versão 7.4 nos trouxe uma pequena novidade que altera esse conceito, pelo menos no escopo da Orientação a Objetos. Agora podemos definir o tipo dos atributos que criarmos em nossas classes. Vamos ver um exemplo, criando uma classe chamada “Person”:

class Person {

    public int $id;

    public string $name;

}

Com este código definimos que o atributo $id deve ser obrigatoriamente do tipo inteiro e o atributo $name deve ser uma string.

Vamos criar uma nova instância dessa classe e definir um valor para o atributo $id:

$glaucio = new Person();

$glaucio->id = "150";

Nós definimos que seu valor será o número 150. Esse código irá funcionar, pois respeita o que definimos ao criar o atributo.

Contudo, o que acontece se informarmos o valor “null” para ele? Vamos instanciar um novo objeto para isso.

$joao = new Person();

$joao->id = null;

Ao testar o código no navegador, vemos o seguinte resultado:

Erro retornado em nosso navegador

A mensagem nos informa que o atributo $id deve ser inteiro e nos retornou um erro fatal, parando a execução do código, o que mostra que a tipagem está funcionando.

Mas vamos pensar em mais uma situação. O que acontece se informarmos uma string? Vamos testar.

$joao->id = "150";

Agora o atributo $id possui o valor da string “150”. O que acontece nesse caso? O código funcionará! Isso ocorre pois o PHP tentará converter o valor informado para inteiro e retornará um erro apenas se não conseguir. No caso de uma string, a conversão para inteiro é possível.

Se desejar deixar o PHP o mais “rigoroso” possível na questão dos tipos de dados, basta acrescentar essa linha no início do código:

declare (strict_types = 1);

Agora, se testarmos o mesmo código, veremos o seguinte resultado no navegador:

Erro em nosso navegador

Agora sim a verificação foi realizada por completo. Lembrando que ensinamos tudo sobre Orientação a Objetos no PHP em nosso Curso Completo de PHP 7.

Como essa mudança pode ser de ajuda? Talvez você já esteja acostumado em usar o PHP sem tipagem de dados e pode ser que não ache essa mudança algo bom. Entretanto, podemos encarar melhor essa mudança se a encararmos como um recurso a mais e identificarmos algumas situações em que ela pode ser útil. Por exemplo: essa novidade nos ajuda a diminuir as chances de encontrar erros de tipo em nosso código, o que pode nos poupar algumas dores de cabeça ?.

Arrow Functions

Se você já trabalha com JavaScript, imagino que esteja acostumado a usar Arrow Functions em seu código. Inclusive, já falamos sobre esse conceito em nosso Blog, no artigo Entendendo Arrow Functions de uma vez por todas.

Sabemos que esse é um recurso que ajuda a deixar nosso código mais enxuto, e agora ele está disponível também no PHP. Para criar uma arrow function, precisamos usar a palavra fn, que agora é reservada, e então usar a mesma sintaxe que já estamos acostumados no JavaScript. Vamos ver um exemplo.

Imagine que desejamos filtrar um array de números, retornando apenas aqueles que são menores que 5. É possível fazer isso com a função array_filter(). Vamos usar o seguinte código:

$numbers = [1, 2, 3, 4, 5];

$numbers_filtered = array_filter($numbers, function ($n) {
    return ($n < 5);
});

Esse código funcionará sem problemas. Contudo, com arrow functions podemos executar essa mesmo função em apenas uma linha, com o seguinte código:

$numbers_filtered = array_filter($numbers, fn($n) => ($n < 5));

Bem mais conciso, não acha?

Entretanto, é necessário salientar um ponto importante. O conceito de arrow functions no PHP ainda não é 100% igual ao que já conhecemos no JavaScript. Por exemplo, ainda não é possível definir uma arrow function como o valor de uma variável PHP. Só podemos usá-las, pelo menos por enquanto, em funções que esperam uma outra função como parâmetro, como array_filter(), array_map() e array_reduce().

Operador de atribuição de null coalescing

O operador null coalescing foi adicionado ao PHP na versão 7.0 com o objetivo de simplificar o uso do operador ternário com a função isset(). Por exemplo, imagine a seguinte situação: possuímos uma variável chamada $photo e queremos determinar que se ela não possuir nenhum valor, iremos defini-lo como “default.png”. Podemos usar o seguinte código para isso:

if (!isset($photo)) {
    $photo = "default.png";
}

Entretanto, usando a versão 7.0, podemos converter esse if() em apenas uma linha, como vemos abaixo:

$photo = $photo ?? "default.png";

Esse operador é muito interessante realmente. Contudo, a versão 7.4 simplificou ainda mais essa sintaxe. Note que no código acima nós repetimos a chamada da variável $photo. A partir de agora, se nos depararmos com essa situação, basta informar os dois sinais de interrogação e o sinal de igual juntos, desta forma:

$photo ??= "default.png";

Ainda mais simples, não é mesmo?

Espalhamento de arrays

Essa é mais uma novidade que nos lembra os recursos do JavaScript. Podemos dizer com cautela que o espalhamento de arrays é como o “spread operator” do PHP. Essa é uma novidade que também veio para simplificar nossos códigos.

Vamos ver um exemplo. Imagine que possuímos dois arrays: um chamado $companies e  outro chamado $old_companies. Eles possuem a seguinte estrutura:

$companies = ['Facebook', 'Google'];
$old_companies = ['Apple', 'Microsoft', 'IBM'];

Agora, imagine que desejamos unir esses dois arrays em apenas um. Talvez já venha à sua mente a função array_merge(). Poderíamos usá-la com este código:

$all_companies = array_merge($old_companies, $companies);

Esse código iria funcionar. Entretanto, com o recurso de espalhamento de arrays, podemos implementar os valores de um array em outro no momento de sua criação. Para isso, basta usar os três pontos e o nome do array. O código acima poderia ser reescrito dessa forma:

$companies = ['Facebook', 'Google'];
$all_companies = ['Apple', 'Microsoft', 'IBM', ...$companies];

Note que nesse segundo caso nem foi necessário criar o array $old_companies, o que deixou nosso código um pouco mais limpo.

Lembrando apenas que, mesmo que essa novidade nos lembre o conceito do spread operator do JavaScript, ela ainda não possui todos os recursos que o ECMAScript detém neste sentido.

Separador de valores numéricos

Uma novidade no PHP 7.4 bem interessante é a separação visual de valores numéricos por meio de um underscore (_) sem gerar erro de sintaxe.

Como isso pode nos ajudar?

Vamos criar uma variável chamada $number que possuirá um valor numérico:

$number = 1000000;

Excelente! Mas, que número é esse? Fica difícil de dizer sem os separadores visuais, não é mesmo? Com o PHP 7.4, podemos criar a mesma variável desta forma:

$number = 1_000_000;

Agora sim dá pra entender que esse número é 1 milhão. Bem mais legível, não é mesmo? O melhor é que esse código não retornará nenhum erro em seu editor de texto e se o exibirmos na tela com formato numérico, usando o código echo number_format($number, 0, ".", "."), veremos o seguinte resultado:

Retorno do código em nosso navegador

Note que o PHP identificou o número como um inteiro e ainda adicionou os separadores nos locais corretos. Isso também pode ser feito com variáveis do tipo float, hexadecimal ou binário.

As novidades do PHP 7.4 são realmente muito relevantes. E é muito bom poder acompanhar o desenvolvimento e amadurecimento dessa linguagem, que está sempre evoluindo. O PHP 8 pode ser lançado ainda este ano. O que mais será que veremos de novidade? Só o tempo dirá.

Enquanto isso, podemos continuar a estudar e aprender dessa linguagem de programação sensacional, que nos ajuda a criar projetos incríveis para a Web. Até o próximo artigo :)

Hcode: Utilizamos cookies para a personalização de anúncios e experiências de navegação dentro de nosso site. Ao continuar navegando, você concorda com as nossas Política de Privacidade.