Foi apresentada a primeira versão alfa do novo ramo da linguagem de programação PHP 8.1. O lançamento está previsto para 25 de novembro. As principais inovações já disponíveis para testes ou planejadas para implementação no PHP 8.1:
- Adicionado suporte para enumerações, por exemplo, agora você pode usar as seguintes construções: enum Status { case Pending; caso Ativo; caso arquivado; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
- Adicionado suporte para threads leves chamadas fibras, que permitem o controle de paralelização em baixo nível. O suporte a fibras está planejado para os frameworks Amphp e ReactPHP. `$fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('after resuming');`
- A implementação do cache de código objeto (opcache) foi aprimorada, adicionando a capacidade de armazenar em cache informações de herança de classes. Essa otimização melhorou o desempenho de alguns aplicativos em 5 a 8%.
- O operador de descompactação dentro de arrays "...$var", que permite a substituição de arrays existentes ao definir um novo array, foi estendido para suportar chaves de string (anteriormente apenas identificadores digitais eram suportados). Por exemplo, agora você pode usar no código: $array1 = [“a” => 1]; $matriz2 = ["b" => 2]; $matriz = [“a” => 0,…$matriz1,…$matriz2]; var_dump($matriz); // ["a" => 1, "b" => 2]
- Existe um novo tipo "nunca" que pode ser usado para informar aos analisadores estáticos que uma função encerrará a execução do programa, por exemplo, lançando uma exceção ou executando a função de saída. função dd (entrada $ mista): nunca {exit; }
- Foi proposta uma nova função array_is_list, que permite determinar se as chaves do array estão organizadas em ordem crescente de valores numéricos, começando em 0: $list = [“a”, “b”, “c”]; array_is_list($lista); // verdadeiro $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($tambémNotAList); // falso
- Propõe-se a possibilidade de sobrescrever constantes em uma classe durante a herança. Para impedir a sobrescrita de constantes de uma classe pai, pode-se usar a palavra-chave "final". Exemplo: `class Foo { public const X = "foo"; final public const Z = "foo"; } class Bar extends Foo { public const X = "bar"; }`
- As funções fsync e fdatasync são propostas para forçar o salvamento das alterações no cache do disco. $arquivo = fopen("amostra.txt", "w"); fwrite($arquivo, "Algum conteúdo"); if (fsync($file)) { echo "O arquivo foi persistido com sucesso no disco."; } fclose($arquivo);
- Adicionada a capacidade de usar os prefixos "0o" e "0O" para números octais, além do prefixo "0" usado anteriormente. 016 === 0o16; // verdadeiro 016 === 0O16; // verdadeiro
- Propõe-se limitar seletivamente o uso de $GLOBALS, o que levará a uma violação da compatibilidade com versões anteriores, mas permitirá acelerar significativamente as operações com arrays. Por exemplo, está sendo considerada a possibilidade de desabilitar a escrita em $GLOBALS e a passagem de $GLOBALS por ponteiro. Uma análise de 2000 pacotes mostrou que apenas 23 deles seriam afetados por esta mudança. Por exemplo, se a proposta for aprovada, 8.1 não suportará mais expressões como: $GLOBALS = []; $GLOBAIS += []; $GLOBAIS =& $x; $x =& $GLOBAIS; não definido($GLOBALS); by_ref($GLOBALS);
- O trabalho continuou na transferência de funções do uso de recursos para a manipulação de objetos. As funções finfo_* e imap_* foram transferidas para objetos.
- A passagem de valores nulos como argumentos para funções internas marcadas como não anuláveis foi descontinuada. No PHP 8.1, usar construções como str_contains("string", null) levará a um aviso, e no PHP 9 a um erro.
- Adicionado suporte para algoritmos de hash MurmurHash3 e xxHash.
Fonte: opennet.ru
