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

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

Principais mudanças no PHP 8.3:

  • Durante a clonagem de classes, é possível reinicializar propriedades com o atributo “readonly”. A substituição de propriedades somente leitura é permitida apenas dentro da função “__clone”: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // permitido mesmo que a propriedade "createdAt" seja somente leitura. } }
  • Foi fornecida a capacidade de usar constantes com indicação de tipo em classes, características e enumerações: class Foo { const string BAR = 'baz'; }
  • Adicionado suporte para o atributo “#[Override]”, com o qual o desenvolvedor pode informar ao intérprete que o método marcado substitui algum método pai. Se não houver substituição, o interpretador exibirá um erro.
  • Manipulação alterada de valores negativos como um índice de array. Por exemplo, ao adicionar um elemento com número “-5” a um array vazio e adicionar outro elemento, anteriormente o segundo elemento era salvo com índice “0”, mas a partir da versão PHP 8.3 será salvo com índice “-4” . $matriz = []; $array[-5] = 'a'; $matriz[] = 'b'; var_export($array); // Era array (-5 => 'a', 0 => 'b') // Tornou-se array (-5 => 'a', -4 => 'b')
  • Adicionada a capacidade de criar classes anônimas no modo somente leitura: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Adicionada função json_validate() para verificar rapidamente se uma string está no formato JSON sem realizar operações de decodificação. json_validate(string $json, int $profundidade = 512, int $flags = 0): bool
  • Novos métodos foram adicionados à classe Randomizer, que fornece uma API de alto nível para geração de números e sequências pseudo-aleatórios: getBytesFromString para geração de uma string de determinado tamanho, usando em ordem aleatória os caracteres presentes em outra string; getFloat e nextFloat para gerar um número aleatório de ponto flutuante que esteja dentro do intervalo especificado.
  • Adicionada a capacidade de recuperar constantes usando sintaxe de classe dinâmica: class Foo { const BAR = 'bar'; } $nome = 'BAR'; // Anteriormente, para recuperar a constante BAR, você tinha que chamar constante(Foo::class . '::' . $name); // Agora basta especificar Foo::{$name};
  • Adicionada geração de exceções individuais (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) em caso de problemas surgidos em operações que trabalham com datas e horas.
  • Tratamento aprimorado de erros que ocorrem durante a análise de dados serializados na função unserialize(). Em caso de problemas, unserialize() agora emite E_WARNING em vez de E_NOTICE.
  • Foram feitas alterações na função range(). Uma exceção é gerada ao tentar passar objetos, recursos ou arrays em variáveis ​​que definem limites de intervalo, bem como ao especificar um valor negativo no parâmetro $step ou um valor indefinido em qualquer parâmetro. Uma lista de caracteres agora pode ser exibida ao especificar strings em vez de números (por exemplo, “range('5', 'z')").
  • Alterado o comportamento das características com propriedades estáticas, que agora substituem as propriedades estáticas herdadas da classe pai.
  • Adicionadas configurações para proteção contra estouro de pilha. As diretivas zend.max_allowed_stack_size e zend.reserved_stack_size foram adicionadas ao arquivo ini, definindo o tamanho máximo permitido e reservado da pilha. O programa irá travar ao se aproximar do esgotamento da pilha, quando a pilha estiver mais cheia do que a diferença entre zend.max_allowed_stack_size e zend.reserved_stack_size (a execução será interrompida antes que ocorra uma falha de segmentação). Por padrão, o valor zend.max_allowed_stack_size é definido como 0 (0 — o tamanho é determinado automaticamente; para desabilitar a limitação, você pode defini-lo como -1).
  • Adicionadas novas funções POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() e posix_eaccess().
  • A função mb_str_pad foi adicionada, que é análoga à função de string str_pad(), projetada para funcionar com codificações multibyte, como UTF-8.
  • Permite criar encerramentos a partir de métodos e passar argumentos nomeados para esses encerramentos. $teste = novo Teste(); $fechamento = $teste->mágica(…); $closure(a: 'olá', b: 'mundo');
  • Comportamento alterado ao lidar com a visibilidade de constantes em interfaces. interface I { public const FOO = 'foo'; } classe C implementa I { private const FOO = 'foo'; }
  • Os recursos das funções array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() e proc_get_status() foram expandidos.
  • A capacidade de passar um valor negativo de $widths para mb_strimwidth() foi descontinuada. A constante NumberFormatter::TYPE_CURRENCY foi removida. O suporte para chamar a função ldap_connect() com dois parâmetros $host e $port foi descontinuado. A configuração opcache.consistency_checks foi removida.

Fonte: opennet.ru

Adicionar um comentário