Released!
PHP 8.0 é uma atualização importante da linguagem PHP.
Ela contém muitos novos recursos e otimizações, incluindo argumentos nomeados, união de tipos, atributos, promoção de propriedade do construtor, expressão match, operador nullsafe, JIT e melhorias no sistema de tipos, tratamento de erros e consistência.

Argumentos nomeados RFC

PHP 7
PHP 8
  • Especifique apenas os parâmetros obrigatórios, pulando os opcionais.
  • Os argumentos são independentes da ordem e autodocumentados.

Atributos RFC Doc

PHP 7
PHP 8

Em vez de anotações PHPDoc, agora você pode usar metadados estruturados com a sintaxe nativa do PHP.

Promoção de propriedade de construtor RFC Doc

PHP 7
x = $x; $this->y = $y; $this->z = $z; } }', );?>
PHP 8

Menos código boilerplate para definir e inicializar propriedades.

União de tipos RFC Doc

PHP 7
number = $number; } } new Number(\'NaN\'); // Ok', );?>
PHP 8

Em vez de anotações PHPDoc para uma combinação de tipos, você pode usar declarações de união de tipos nativa que são validados em tempo de execução.

Expressão match RFC Doc

PHP 7
Oh no!', );?>
PHP 8
"Oh no!", 8.0 => "This is what I expected", }; //> This is what I expected', );?>

A nova expressão match é semelhante ao switch e tem os seguintes recursos:

  • Match é uma expressão, o que significa que seu resultado pode ser armazenado em uma variável ou retornado.
  • Match suporta apenas expressões de uma linha e não precisa de uma declaração break;.
  • Match faz comparações estritas.

Operador nullsafe RFC

PHP 7
user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } }', );?>
PHP 8
user?->getAddress()?->country;', );?>

Em vez de verificar condições nulas, agora você pode usar uma cadeia de chamadas com o novo operador nullsafe. Quando a avaliação de um elemento da cadeia falha, a execução de toda a cadeia é abortada e toda a cadeia é avaliada como nula.

Comparações mais inteligentes entre strings e números RFC

PHP 7
PHP 8

Ao comparar com uma string numérica, o PHP 8 usa uma comparação numérica. Caso contrário, ele converte o número em uma string e usa uma comparação de string.

Erros consistentes para tipos de dados em funções internas RFC

PHP 7
PHP 8

A maioria das funções internas agora lançam uma exceção Error se a validação do parâmetro falhar.

Compilação Just-In-Time

PHP 8 apresenta dois motores de compilação JIT. Tracing JIT, o mais promissor dos dois, mostra desempenho cerca de 3 vezes melhor em benchmarks sintéticos e melhoria de 1,5 a 2 vezes em alguns aplicativos específicos de longa execução. O desempenho típico das aplicações está no mesmo nível do PHP 7.4.

Relative JIT contribution to PHP 8 performance

Just-In-Time compilation

Melhorias no sistema de tipo e tratamento de erros

  • Verificações de tipo mais rígidas para operadores aritméticos / bit a bit RFC
  • Validação de método abstrato em traits RFC
  • Assinaturas corretas de métodos mágicos RFC
  • Avisos de motor reclassificados RFC
  • Erro fatal para assinaturas de método incompatíveis RFC
  • O operador @ não silencia mais os erros fatais.
  • Herança com métodos privados RFC
  • Tipo mixed RFC
  • Tipo de retorno static RFC
  • Tipagem de funções internas Discussão por email
  • Objetos opacos em vez de recursos para Curl, Gd, Sockets, OpenSSL, XMLWriter, e XML extensões

Outros ajustes e melhorias de sintaxe

  • Permitir vírgula no final da lista de parâmetros RFC e listas de uso em closures RFC
  • Catches sem variável na captura de exceção RFC
  • Ajustes de sintaxe para variáveis RFC
  • Tratamento de nomes de namespace como token único RFC
  • Throw como expressão RFC
  • Permitir ::class em objetos RFC

Novas classes, interfaces e funções