Rilascio del linguaggio di programmazione PHP 8.3

Dopo un anno di sviluppo è stata presentata la versione del linguaggio di programmazione PHP 8.3. Il nuovo ramo include una serie di nuove funzionalità, oltre a diverse modifiche che interrompono la compatibilità.

Modifiche principali in PHP 8.3:

  • Durante la clonazione della classe è possibile reinizializzare le proprietà con l'attributo “readonly”. La sovrascrittura delle proprietà di sola lettura è consentita solo all'interno della funzione “__clone”: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // consentito anche se la proprietà "createdAt" è di sola lettura. } }
  • È stata fornita la possibilità di utilizzare costanti con indicazione del tipo in classi, tratti ed enumerazioni: class Foo { const string BAR = 'baz'; }
  • Aggiunto il supporto per l'attributo “#[Override]”, con il quale lo sviluppatore può informare l'interprete che il metodo contrassegnato sovrascrive qualche metodo genitore. Se non è presente alcuna sostituzione, l'interprete visualizzerà un errore.
  • Modificata la gestione dei valori negativi come indice di array. Ad esempio, quando si aggiunge un elemento con il numero “-5” ad un array vuoto e si aggiunge un altro elemento, in precedenza il secondo elemento veniva salvato con l'indice “0”, ma a partire dalla versione PHP 8.3 verrà salvato con l'indice “-4” . $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // Era un array (-5 => 'a', 0 => 'b') // Diventava un array (-5 => 'a', -4 => 'b')
  • Aggiunta la possibilità di creare classi anonime in modalità di sola lettura: $class = nuova classe di sola lettura { public function __construct( public string $foo = 'bar', ) {} };
  • Aggiunta la funzione json_validate() per verificare rapidamente se una stringa è in formato JSON senza eseguire operazioni di decodifica. json_validate(string $json, int $profondità = 512, int $flags = 0): bool
  • Nuovi metodi sono stati aggiunti alla classe Randomizer, che fornisce un'API di alto livello per generare numeri e sequenze pseudo-casuali: getBytesFromString per generare una stringa di una determinata dimensione, utilizzando in ordine casuale i caratteri presenti in un'altra stringa; getFloat e nextFloat per generare un numero casuale in virgola mobile che rientra nell'intervallo specificato.
  • Aggiunta la possibilità di recuperare costanti utilizzando la sintassi della classe dinamica: class Foo { const BAR = 'bar'; } $nome = 'BARRA'; // In precedenza, per recuperare la costante BAR, dovevi chiamare Constant(Foo::class . '::' . $name); // Ora specifica semplicemente Foo::{$nome};
  • Aggiunta la generazione di eccezioni individuali (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) in caso di problemi derivanti dalle operazioni che lavorano con date e ora.
  • Gestione migliorata degli errori che si verificano durante l'analisi dei dati serializzati nella funzione unserialize(). In caso di problemi, unserialize() ora emette E_WARNING invece di E_NOTICE.
  • Sono state apportate modifiche alla funzione range(). Viene generata un'eccezione quando si tenta di passare oggetti, risorse o array in variabili che definiscono i limiti dell'intervallo, nonché quando si specifica un valore negativo nel parametro $step o un valore non definito in qualsiasi parametro. Ora è possibile visualizzare un elenco di caratteri quando si specificano stringhe anziché numeri (ad esempio, "range('5', 'z')").
  • Modificato il comportamento dei tratti con proprietà statiche, che ora sovrascrivono le proprietà statiche ereditate dalla classe genitore.
  • Aggiunte impostazioni per la protezione da overflow dello stack. Le direttive zend.max_allowed_stack_size e zend.reserved_stack_size sono state aggiunte al file ini, definendo la dimensione massima consentita e riservata dello stack. Il programma si bloccherà quando si avvicina l'esaurimento dello stack, quando lo stack è pieno più della differenza tra zend.max_allowed_stack_size e zend.reserved_stack_size (l'esecuzione si interromperà prima che si verifichi un errore di segmentazione). Per impostazione predefinita, il valore zend.max_allowed_stack_size è impostato su 0 (0—la dimensione viene determinata automaticamente; per disabilitare la limitazione, puoi impostarla su -1).
  • Aggiunte nuove funzioni POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() e posix_eaccess().
  • È stata aggiunta la funzione mb_str_pad, che è un analogo della funzione stringa str_pad(), progettata per funzionare con codifiche multibyte come UTF-8.
  • Consente di creare chiusure da metodi e passare argomenti con nome a tali chiusure. $test = nuovo test(); $chiusura = $test->magia(…); $chiusura(a: 'ciao', b: 'mondo');
  • Comportamento modificato durante la gestione della visibilità delle costanti nelle interfacce. interfaccia I { public const FOO = 'foo'; } la classe C implementa I { private const FOO = 'foo'; }
  • Le capacità delle funzioni array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() e proc_get_status() sono state ampliate.
  • La possibilità di passare un valore $widths negativo a mb_strimwidth() è stata deprecata. La costante NumberFormatter::TYPE_CURRENCY è stata rimossa. Il supporto per chiamare la funzione ldap_connect() con due parametri $host e $port è stato interrotto. L'impostazione opcache.consistency_checks è stata rimossa.

Fonte: opennet.ru

Aggiungi un commento