O novo PHP 8 - Maykon Silveira

Novidade sobre o php 8 por Maykon Silveira



Olá queridos alunos e alunas, aqui é Maykon Silveira. 

 

O PHP tem uma grande novidade para 2021 o PHP 8, confira o que mudou:

 

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

 

Argumentos nomeados RFC

 

No PHP 7 ficaria assim:
 
htmlspecialchars($stringENT_COMPAT ENT_HTML401'UTF-8'false);
 
 
No PHP 8 ficaria assim:
 
htmlspecialchars($stringdouble_encodefalse);
 
  • Especifique apenas os parâmetros obrigatórios, ignorando os opcionais.
  • Os argumentos são independentes da ordem e autodocumentados.

 

 

Atributos RFC Doc

 

 

No PHP 7 ficaria assim:
 
class PostsController
{
    
/**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    
public function get($id) { /* ... */ }
}
 
 
No PHP 8 ficaria assim:
 
class PostsController
{
    
#[Route("/api/posts/{id}", methods: ["GET"])]
    
public function get($id) { /* ... */ }
}
 
 
Em vez de anotações PHPDoc, agora você pode usar metadados estruturados com a sintaxe nativa do PHP.
 
 

 Documento RFC da promoção da propriedade do construtor

 

No PHP 7 ficaria assim:
 
class Point {
  public 
float $x;
  public 
float $y;
  public 
float $z;

  public function 
__construct(
    
float $x 0.0,
    
float $y 0.0,
    
float $z 0.0
  
) {
    
$this->$x;
    
$this->$y;
    
$this->$z;
  }
}
 
 
No PHP 8 ficaria assim:
 
class Point {
  public function 
__construct(
    public 
float $x 0.0,
    public 
float $y 0.0,
    public 
float $z 0.0,
  ) {}
}
 
 Menos código clichê para definir e inicializar propriedades.
 
 
 

Tipos de união RFC Doc

 

 

 
No PHP 7 ficaria assim:
 
class Number {
  
/** @var int|float */
  
private $number;

  
/**
   * @param float|int $number
   */
  
public function __construct($number) {
    
$this->number $number;
  }
}

new 
Number('NaN'); // Ok
 
No PHP 8 ficaria assim:
 
class Number {
  public function 
__construct(
    private 
int|float $number
  
) {}
}

new 
Number('NaN'); // TypeError
 
 
Em vez de anotações PHPDoc para uma combinação de tipos, você pode usar declarações de tipo de união nativa que são validadas em tempo de execução.
 
 

 Match expression RFC Doc

 

Lembra do nosso velho amigo switch, o cara mudou para melhor, vejam: 

 
No PHP 7 ficaria assim:
 
switch (8.0) {
  case 
'8.0':
    
$result "Oh no!";
    break;
  case 
8.0:
    
$result "This is what I expected";
    break;
}
echo 
$result;
//> Oh no!
 
 
 
No PHP 8 ficaria assim:
 
echo match (8.0) {
  
'8.0' => "Oh no!",
  
8.0 => "This is what I expected",
};
//> This is what I expected
 
 

A nova correspondência é 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.
  • Os ramos de correspondência suportam apenas expressões de uma linha e não precisam de uma pausa; declaração.
  • Match faz comparações estritas.
 

RFC do operador Nullsafe

 
 
 
No PHP 7 ficaria assim:
 
$country =  null;

if (
$session !== null) {
  
$user $session->user;

  if (
$user !== null) {
    
$address $user->getAddress();
 
    if (
$address !== null) {
      
$country $address->country;
    }
  }
}
 
 
No PHP 8 ficaria assim:
 
$country $session?->user?->getAddress()?->country;
 
 
Em vez de condições de verificação nula, 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 é cancelada e toda a cadeia é avaliada como nula.
 
 

String mais sã para comparações de números RFC

 

 
 
 
No PHP 7 ficaria assim:
 
== 'foobar' // true
 
 
No PHP 8 ficaria assim:
 
== 'foobar' // false
 
 
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 de tipo consistente para funções internas RFC

 
 
No PHP 7 ficaria assim:
 
strlen([]); // Warning: strlen() expects parameter 1 to be string, array given

array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0
 
 
No PHP 8 ficaria assim:
 
strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given

array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0
 
 
A maioria das funções internas agora lança uma exceção de erro se a validação dos parâmetros 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 do aplicativo está no mesmo nível do PHP 7.4.

 

Contribuição JIT relativa para o desempenho do PHP 8

Compilação Just-In-Time

 

 

Melhorias no sistema de tipo e tratamento de erros

 

  • Verificações de tipo mais estritas para operadores aritméticos / bit a bit RFC
  • RFC de validação de método de característica abstrata
  • Assinaturas corretas de métodos mágicos RFC
  • RFC de avisos de mecanismo reclassificado
  • 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
  • RFC de tipo misto
  • RFC de tipo de retorno estático
  • Tipos de funções internas Tópico de email
  • Objetos opacos em vez de recursos para extensões Curl , Gd , Sockets , OpenSSL , XMLWriter e XML
 
 
 

Outros ajustes e melhorias de sintaxe

  • Permitir uma vírgula à direita nas listas de parâmetros RFC e RFC de listas de uso de fechamento
  • RFC de capturas sem captura
  • RFC de ajustes de sintaxe variável
  • Trate nomes com namespace como RFC de token único
  • Throw é agora uma expressão RFC
  • Permitir :: classe em objetos RFC

 

Novas classes, interfaces e funções

 

Bom pessoal, espero ter ajudado a todos com esta super dica. 

Fonte php.net 

Em breve curso de PHP 8 do zero ao profissional. 

Atenciosamente Maykon Silveira

 
 
 
 

php8, o que mudou no php 8, tudo sobre o php 8, qual a diferença entre php 7 e 8, php 7 vs php 8, Maykon Silveira, curso de php 8, cursos online de php 8, curso de php 8 orientado a objetos, curso fullstack php 8, php, programação php 8


Maykon Silveira

Maykon Silveira

CEO / FOUNDER / WEBTEC TECHNOLOGIES
Programador: PHP - HTML - CSS - JAVASCRIPT - MYSQLI - ANDROID - APPLE - MOBILE
Criador de Games: XBOX - PLAYSTATION - MOBILE - COMPUTADORES - EDIÇÃO DE VÍDEOS
Marketing: GOOGLE ADWORDS- FACEBOOK ADS - YOUTUBE
Experiência na área de programação desde 2007.