As novidades do PHP 8 - Wallace Maxters
As novidades do PHP 8
A versão 8.0 do PHP veio com bastante novidades. Esta versão contém muitos novos recursos e otimizações.
O PHP 8 suporta argumentos nomeados. Para funções/métodos cujo os parâmetros sejam opcionais, o PHP agora permite que você passe o nome do argumento para a função.
file_put_contents($hostname, $content, context: $stream);
Isso é muito útil para "pular" a passagem de um parâmetro opcional e já definir o parâmetro desejado sem ter que considerar a posição do mesmo.
Os named arguments (argumentos nomeados) devem ser usado apenas após a passagem dos argumentos posicionais (os argumentos obrigatórios da função). No caso de file_put_contents, como no exemplo, o primeiro e segundo argumentos sempre são posicionais.
O PHP8 agora permite definir mais de um tipo para uma propriedade, ou parâmetros e retorno de tipos de funções/métodos. De acordo com a documentação (tradução livre):
Uma declaração de union types aceita valores de vários tipos diferentes, em vez de um único.
O PHP 8 introduziu a expressão match. Ela lembra um pouco o switch, porém a finalidade é diferente. Uma delas é que match poderá ter o resultado armazenado em uma variável ou retornado. Além disso, ela pode comparar dois valores, sem a necessidade de incluir o break várias vezes.
$resultado = match ($n) {
1, 2 => 'um ou dois',
3, 4 => 'três ou quatro',
default => 'maior ou igual a 5',
var_dump($resultado); // 'maior ou igual a 5'
Caso match não tenha um default definido e o valor em questão não é compatível com as condições definidas, será lançado um UnhandledMatchError.
Ainda assim, há casos onde você não precisa saber exatamente se um valor é igual, mas apenas se ele é verdadeiro ou falso. Nesses casos, você pode usar match, passando true como parâmetro e analisando a variável dentro do mesmo para tal fim.
$resultado = match (true) {
$idade >= 65 => 'idoso',
$idade >= 25 => 'adulto',
$idade >= 18 => 'jovem adulto',
default => 'criança',
var_dump($resultado); // 'jovem adulto'
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4119206527475379" data-ad-slot="7774041254" data-ad-format="auto" data-full-width-responsive="true">
Consistência para tipos de erros em funções internas do PHP
Nas versões anteriores do PHP, geralmente, quando se passava um argumento com valor não esperado para uma função, o mesmo gerava um "Warning".
// PHP Warning:  strlen() expects parameter 1 to be string, array given in script.php on line 3
Porém, a versão PHP 8.0 introduziu melhorias para esses casos. No exemplo acima, ao executar no PHP 8, receberíamos o lançamento de TypeError.
// PHP Fatal error:  Uncaught TypeError: strlen(): Argument #1 ($str) must be of type string, array given in script.php:3
Sendo assim, é possível ainda capturar o TypeError, conforme desejado.
Novas funções de verificações de string
O PHP 8.0 introduziu algumas funções novas de para verificação de string. Elas são str_contains, str_starts_with, str_ends_with, as quais são parecidas com as existentes em linguagens como Python e Javascript.
Exemplo da função str_contains
Nas versões anteriores do PHP, para verificar se uma string possuia determinada correspondência, utilizávamos a função strpos.
foreach(['rato', 'barata', 'gato'] as $animal) {
var_dump(strpos($animal, 'to') !== false);
Note que era necessário verificar se o retorno era diferente de false, pois strpos retornava o número referente a posição encontrada na string.
Porém, a função str_contains simplesmente retornará boolean caso a string seja ou não encontrada.
var_dump(str_contains($animal, 'to'));
Exemplo da função str_starts_with
Nas versões anteriores do PHP, para verificar se uma string possuia determinada correspondência no iníco da mesma, também utilizávamos a função strpos.
var_dump(strpos($animal, 'ra') === 0);
Basicamente, teríamos que verificar se a posicão encontrada era igual a 0, pois como já tiro, essa função retorna um int, que representa a posição em que o termo foi encontrado na string alvo.
Já na versão 8, ficaria dessa forma:
var_dump(str_starts_with($animal, 'ra'));
Exemplo da função str_ends_with
Nas versões anteriores do PHP, para verificar se uma string possuia determinada correspondência no final da mesma, poderíamos utilizar a função substr_compare combinado com strlen.