Em dezembro de 2020 teremos o lançamento da versão 8 do PHP, e consequentemente muitas novidades! Falaremos de algumas delas hoje:
1. Função `str_contains`
Hoje em dia quando queremos saber se uma string tem uma determinada palavra, precisamos utilizar a função str_pos
.
$myString = 'php8'; $findMe = '8'; if (strpos($myString, $findMe) !== false) { // faça alguma coisa }
A comparação com !== false
é necessária pois caso a ocorrência da palavra procurada esteja no índice 0
o mesmo será retornado.
Com a adição dessa nova função, o código fica muito mais legível:
$myString = 'php8';
$findMe = '8';
if (str_contains($myString, $findMe)) {
// faça alguma coisa
}
2. Constructor promotion
Atualmente, a definição de um atributo em uma classe requer muito código:
class Point { public float $x; public function __construct( float $x = 0.0 ) { $this->x = $x; } }
Agora no PHP 8 existe uma forma de fazer isso de um jeito mais simples:
class Point { public function __construct( public float $x = 0.0 ) {} }
3. Disparo de exceções
Antes não era possível disparar exceções onde só expressões eram permitidas, por exemplo:
$callable = fn() => throw new Exception();
$value = $nullableValue ?? throw new InvalidArgumentException();
$value = $falsableValue ?: throw new InvalidArgumentException();
Agora essas declarações são permitidas, tornando o código mais legível.
4. Match expression
Elas são similares ao switch
, com a diferença que elas tem uma sintaxe mais simples e permitem que valores sejam retornados:
// Antes switch (1) { case 0: $result = 'Foo'; break; case 1: $result = 'Bar'; break; case 2: $result = 'Baz'; break; } echo $result; //> Bar
// Depois echo match (1) { 0 => 'Foo', 1 => 'Bar', 2 => 'Baz', }; //> Bar
5. Non-capturing catches
Atualmente é necessário especificar uma variável para receber a exceção, mesmo que você não a utilize-a:
try { facaQualquerCoisa(); } catch (PermissaoNegadaException $ex) { echo "Você não tem permissão para executar essa ação."; }
Com essa nova feature, isso não é mais necessário:
try { facaQualquerCoisa(); } catch (PermissaoNegadaException) { // Não precisa declarar uma variável para receber a exceção echo "Você não tem permissão para executar essa ação."; }
Essas são apenas algumas da novidades que estão por vir. As atualizações costumam incluir correções de seguranças, por isso é importante manter a versão do PHP—bem como outras libs e tecnologias—sempre atualizadas.
Caso deseje acompanhar a evolução da linguagem mais de perto e ficar por dentro do que está sendo discutido, um dos meios recomendado é o https://phpinternals.news, um canal de podcats apresentado pelo Derick Rethans (criador do x-Debug), onde semanalmente ele conversa com os autores de algumas RFC’s (acrônimo de Request For Comments). As entrevistas são em inglês e possuem transcrição. Se você não domina essa língua, é possível usar um tradutor de texto para acompanhar.
Nessa página aqui https://wiki.php.net/RFC é possível ver todas as RFC’s e seus respectivos status.
Muito bom!