Algumas melhorias do PHP versão 8
- 24-07-2022
- Toanngo92
- 0 Comments
O PHP 8.0 foi lançado em 26 de novembro de 2020. Essas alterações tornam o PHP mais fácil e descomplicado de trabalhar. O PHP 8.0 é considerado uma grande atualização da linguagem PHP. Ele tem muitos novos recursos e otimizações, incluindo:
- Argumentos nomeados
- Atributos
- Promoção da propriedade do construtor
- Tipos de união
- Expressão de correspondência
- Operador Nullsafe
- Tratamento de erros aprimorado e sistema de tipos
- Consistência
Mục lục
Argumentos nomeados (Argumentos nomeados)
Neste novo recurso, os usuários só precisam especificar os parâmetros obrigatórios e omitir os parâmetros opcionais. Os argumentos são autodocumentados e não dependem da ordem de classificação.
Exemplo de diferença entre PHP 7.0 e 8.0
PHP7 | PHP8 |
htmlspecialchars($string, ENT_COMPATCT | ENT HTML401, 'UTF-8',false); | htmlspecialchars($string, codificação dupla: false); |
Atributos (atributos)
Os usuários agora podem usar metadados estruturados com a sintaxe nativa do PHP, em vez de comentários de documentos PHP.
PHP 7.0 | PHP 8.0 |
class Postscontroller{ /** * @Route("api/posts/{id}"),methods="{"GET"} */ função pública get($id){ // façam } } | class PostsController{ #[Route("api/posts/{id}", ,methods: ["GET"])] função pública get($id){ // façam } } |
Promoção da propriedade do construtor (introdução à inicialização do objeto)
Há encurtamento do código-fonte ao definir e inicializar propriedades para objetos.
PHP 7.0 | PHP 8.0 |
classe Ponto{ flutuação pública $x; flutuação pública $y; flutuação pública $z; função pública __construct( float $ x = 0,0, float $y = 0,0, flutuar $z = 0,0 ){ $isto->x = $x; $isto->y = $y; $isto->z = $z; // façam } } | classe Ponto{ função pública __construct( float público $ x = 0,0, flutuação pública $y = 0,0, float público $z = 0,0 ){ //façam } } |
Tipos de união (combinação de tipos de dados)
Os usuários podem usar declarações de tipo associativo nativo validadas em tempo de execução, em vez de anotações do PHP Docs.
PHP7 | PHP8 |
número da classe{ /** @var int|float */ número privado; /** * @param float|int $número */ função pública __construct($number){ $este->número = $número; } } new Number('NaN'); // isso funciona | número da classe { função pública __construct(private int|float $number){ // façam } } new Number('NaN'); // erro de tipo |
Expressão de correspondência (expressões de correspondência)
A correspondência de expressão no PHP 8.0 é semelhante à conversão com os seguintes recursos:
- Uma correspondência é uma expressão, o que significa que seu resultado pode ser armazenado em uma variável ou pode ser retornado.
- As ramificações correspondentes suportam apenas expressões de linha única e não requerem uma instrução break; .
- A comparação não compara estritamente.
PHP7 | PHP8 |
<?php interruptor(8.0){ caso '8.0': $resultado = '8.0'; parar; caso 8.0; $resultado = '8.0 esperado'; parar; } echo $resultado; // 8,0 | correspondência de eco(8.0){ '8,0' => '8,0', 8.0 => '8.0 esperado', }; // 8.0 exceto |
Operador Nulo Seguro
O usuário pode usar uma série (cadeia) de chamadas com o novo operador null-safe em vez de
escreva o código para as condições que verificam se há nulo.
Toda a execução é abortada quando a identificação de um elemento na sequência falha e, a partir daí, toda a cadeia é nula.
PHP7 | PHP8 |
$país = null; if($sessão !==null){ $usuário = $sessão->usuário; if($usuário !==null){ $endereço = $usuário->getAddress(); } if($endereço !==null){ $país = $endereço->país; } } | $país = $sessão?->usuário?->getAddress()?->país; |
Tratamento de erros e sistema de tipos aprimorados
Houve muitas mudanças em diferentes tipos de sistemas e tratamento de erros aprimorado da seguinte forma:
- Verificação de tipo mais rigorosa para operadores aritméticos/bit a bit do que a versão anterior
- Validação do método de traço abstrato
- Os métodos mágicos agora têm assinaturas corretas.
- O motor de aviso foi reclassificado
- Método incompatível causa erro fatal
- Herança com métodos privados
- Tipo misto
- Tipo de retorno estático
- Use objetos opacos em vez de recursos para OpenSSL, GD, Curl,
Escritor XML, Soquetes e Extensões XML
Consistência (consistência)
O PHP 8.0 tem um erro de consistência para funções internas. A maioria das funções internas lança uma exceção de erro quando os parâmetros não podem ser validados.
Compilador Just In Time (JIT)
Como uma linguagem interpretada ou interpretada, o PHP, quando compilado, não é executado imediatamente no momento do lançamento. Ele roda em tempo real. Nas versões anteriores do PHP, durante a compilação, sempre que o código PHP era executado, o interpretador tinha que primeiro interpretar, depois compilar e, finalmente, executar o código. Isso é feito repetidamente para cada solicitação, resultando em execução lenta de código e desperdício de recursos da CPU.
Este problema foi corrigido com a introdução do compilador Just In Time (JIT), no PHP 8.0.
O compilador JIT permite que os usuários compilem um programa em código de máquina antes que ele possa ser executado. Como o JIT pula a fase de compilação, ele oferece flexibilidade no código PHP e oferece melhorias de longo alcance na execução do código, uso de memória e desempenho. No entanto, essas melhorias se aplicam apenas a cálculos matemáticos ou numéricos, não a aplicativos da Web PHP comuns. O JIT é amplamente utilizado em programas que envolvem longos ciclos de execução, como renderização 3D, análise de dados ou Inteligência Artificial.
O PHP 8.0 apresenta duas ferramentas de compilação JIT, chamadas de Tracing JIT e Function JIT.
O rastreamento JIT é o mais seguro dos dois. Em benchmarks sintéticos, tem desempenho três vezes melhor. Além disso, há duas melhorias em aplicativos específicos de longa execução.