Lançamento da linguagem de programação PHP 8.2

Após um ano de desenvolvimento, foi apresentado o lançamento da linguagem de programação PHP 8.2. A nova ramificação inclui uma série de novos recursos, além de diversas mudanças que quebram a compatibilidade.

Principais melhorias no PHP 8.2:

  • Adicionada a capacidade de marcar uma classe como somente leitura. As propriedades nessas classes podem ser definidas apenas uma vez, após o que não estarão disponíveis para alteração. Anteriormente, as propriedades de classe individuais podiam ser marcadas como somente leitura, mas agora você pode ativar esse modo para todas as propriedades de classe de uma só vez. Especificar o sinalizador "somente leitura" no nível da classe também bloqueia a adição dinâmica de propriedades à classe. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->desconhecido = 'errado'; // Erro: Não é possível criar a propriedade dinâmica Post::$unknown
  • Adicionados tipos separados “true”, “false” e “null”, que podem assumir apenas um valor válido e são usados, por exemplo, para retornar uma função com um sinalizador de finalização de erro ou um valor vazio. Anteriormente, “true”, “false” e “null” só podiam ser usados ​​em conjunto com outros tipos (por exemplo, “string|false”), mas agora podem ser usados ​​separadamente: function AlwaysFalse(): false { return false ; }
  • Forneceu a capacidade de filtrar configurações confidenciais na saída de rastreamento de pilha no momento de um erro. Cortar certas informações pode ser necessário quando informações sobre erros que ocorrem são enviadas automaticamente para serviços de terceiros que rastreiam problemas e informam os desenvolvedores sobre eles. Por exemplo, você pode excluir parâmetros do rastreamento que incluem nomes de usuários, senhas e variáveis ​​de ambiente. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } teste('foo', 'senha', 'baz'); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} lançado em test.php on-line 8
  • Permitido definir constantes em traits (trait, mecanismo de reutilização de código). Constantes definidas em uma característica podem ser acessadas através da classe que usa a característica (mas não através do nome da característica). traço Foo { public const CONSTANT = 1; barra de função pública(): int { return self::CONSTANT; // Erro fatal } } class Bar { use Foo; } var_dump(Barra::CONSTANT); //1
  • Adicionada a capacidade de especificar tipos na forma normal disjuntiva (DNF, Disjunctive Normal Form), que permite combinar a união de tipos (coleções de dois ou mais tipos) e a interseção de tipos (tipos cujos valores se enquadram em vários tipos simultaneamente). class Foo { função pública bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entidade; } }
  • Uma nova extensão “Random” foi proposta com funções e classes para geração de números e sequências pseudo-aleatórios. O módulo fornece uma interface orientada a objetos, permite selecionar diferentes mecanismos para gerar números pseudo-aleatórios, incluindo aqueles adequados para uso em criptografia, e fornece funções auxiliares, por exemplo, para misturar aleatoriamente arrays e strings, selecionar chaves de array aleatório, uso simultâneo de vários geradores com estado próprio e independente. $rng = $é_produção? novo Random\Engine\Secure() : novo Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Conversão de caso independente de localidade implementada. Funções como strtolower() e strtoupper() agora sempre convertem as maiúsculas e minúsculas dos caracteres no intervalo ASCII, como ao definir a localidade como "C".
  • Adicionadas novas funções: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sódio_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Adicionados novos métodos: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • A capacidade de criar propriedades dinamicamente em uma classe foi descontinuada. No PHP 9.0, acessar propriedades que não estão definidas inicialmente na classe resultará em um erro (ErrorException). Classes que fornecem métodos __get e __set para criação de propriedades, ou propriedades dinâmicas em stdClass continuarão funcionando sem alterações, apenas o trabalho implícito com propriedades inexistentes será suportado para proteger o desenvolvedor de bugs ocultos. Para preservar o funcionamento do código antigo, é proposto o atributo “#[AllowDynamicProperties]”, permitindo o uso de propriedades dinâmicas.
  • A capacidade de substituir valores de variáveis ​​em strings usando as expressões "${var}" e ${(var)}" foi descontinuada. O suporte para as substituições "{$var}" e "$var" comumente usadas foi mantido. Por exemplo: "Olá {$mundo}"; OK "Olá $mundo"; OK "Olá ${mundo}"; Obsoleto: o uso de ${} em strings está obsoleto
  • Callables parcialmente suportados que podem ser chamados via "call_user_func($callable)" foram obsoletos, mas não suportam chamadas no formato "$callable()": "self::method" "parent::method" "static :: method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar: :method "]
  • A diretiva error_log_mode foi adicionada às configurações, permitindo determinar o modo de acesso ao log de erros.

Fonte: opennet.ru

Adicionar um comentário