È stata presentata la prima versione alpha del nuovo ramo del linguaggio di programmazione PHP 8.4. Il rilascio è previsto per il 21 novembre. Le principali novità, già disponibili per i test o pianificate per l'implementazione in PHP 8.4:
- È stata aggiunta la supporto per l'aggiunta di gestori di proprietà (property hook), che consentono di aggiungere logica aggiuntiva eseguita durante la modifica o l'accesso alle proprietà di un oggetto, implementata senza intercettare le operazioni di lettura e scrittura tramite le funzioni generali __get e __set, e senza la necessità di creare metodi di wrapper aggiuntivi. L'uso dei gestori di proprietà consente di ridurre significativamente il volume del codice e semplificare la ridefinizione del comportamento delle proprietà, grazie all'associazione di un proprio gestore a ciascuna proprietà. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError("Il nome deve essere non vuoto"); } $this->name = $value; } } public function __construct(string $name) { $this->name = $name; } }
- È consentito specificare riferimenti ai metodi nella costruzione "new" senza parentesi, cioè invece di "name = (new MyClass())->method()" ora è possibile specificare "name = new MyClass()->method()".
- Invece del parametro generale "opcache.jit_buffer_size" per gestire il JIT compiler e configurare la dimensione del buffer JIT, sono stati proposti i parametri "opcache.jit" e "opcache.jit_buffer_size". Per disabilitare il JIT ora è possibile specificare "opcache.jit=disable" invece di "opcache.jit_buffer_size=0". Inoltre, sono state apportate modifiche che riducono il consumo di memoria e aumentano le prestazioni del JIT in alcune situazioni.
- È stata dichiarata obsoleta la funzionalità in cui i parametri delle funzioni con un valore di default assegnato di null consentivano automaticamente l'assegnazione di valori null. Affinché tali parametri possano accettare valori null, ora è richiesta l'indicazione esplicita del prefisso "?". Ad esempio, invece di "function save(Book $book = null) {}" si dovrebbe scrivere "function save(?Book $book = null) {}".
- È stata implementata la classe \Dom\HTMLDocument, che supporta l'analisi corretta del markup HTML5.
- È stata aggiunta la funzione request_parse_body() per analizzare le richieste HTTP con tipo di contenuto multipart/form-data (RFC1867).
Fonte: opennet.ru
