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
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
- Especifique apenas os parâmetros obrigatórios, ignorando os opcionais.
- Os argumentos são independentes da ordem e autodocumentados.
Atributos RFC Doc
{
/**
* @Route("/api/posts/{id}", methods={"GET"})
*/
public function get($id) { /* ... */ }
}
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}
Documento RFC da promoção da propriedade do construtor
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 = $x;
$this->y = $y;
$this->z = $z;
}
}
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0,
) {}
}
Tipos de união RFC Doc
/** @var int|float */
private $number;
/**
* @param float|int $number
*/
public function __construct($number) {
$this->number = $number;
}
}
new Number('NaN'); // Ok
public function __construct(
private int|float $number
) {}
}
new Number('NaN'); // TypeError
Match expression RFC Doc
Lembra do nosso velho amigo switch, o cara mudou para melhor, vejam:
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result;
//> Oh no!
'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
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
String mais sã para comparações de números RFC
Erros de tipo consistente para funções internas RFC
array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0
array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0
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
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
- Classe de mapa fraco
- Interface ajustável
- str_contains () , str_starts_with () , str_ends_with ()
- fdiv ()
- get_debug_type ()
- get_resource_id ()
- implementação do objeto token_get_all ()
- Novas APIs DOM Traversal e Manipulation
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