È stata presentata la prima versione alpha del nuovo ramo del linguaggio di programmazione PHP 8.2. Il rilascio è previsto per il 24 novembre. Le principali novità, già disponibili per il testing o pianificate per l'implementazione in PHP 8.2:
- Sono stati aggiunti i tipi separati «false» e «null», che possono essere utilizzati, ad esempio, per restituire da una funzione un segnale di completamento con errore o un valore vuoto. In precedenza «false» e «null» potevano essere usati solo in combinazione con altri tipi (ad esempio, «string|false»), mentre ora possono essere utilizzati separatamente: function alwaysFalse(): false { return false; }
- È stata aggiunta la possibilità di contrassegnare una classe come accessibile solo in sola lettura. Le proprietà in tali classi possono essere impostate solo una volta, dopodiché non saranno accessibili per le modifiche. In precedenza, solo singole proprietà di una classe potevano essere contrassegnate come di sola lettura, mentre ora è possibile attivare questa modalità per tutte le proprietà della classe. L'impostazione del flag «readonly» a livello di classe blocca anche l'aggiunta dinamica di proprietà alla classe. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Errore: Impossibile creare la proprietà dinamica Post::$unknown
- È stata dichiarata obsoleta la possibilità di creare dinamicamente proprietà in una classe (come «post->unknown» nell'esempio sopra). In PHP 9.0, l'accesso alle proprietà inizialmente non definite nella classe genererà un errore (ErrorException). Le classi che forniscono metodi __get e __set per la creazione di proprietà, o le proprietà dinamiche in stdClass continueranno a funzionare senza modifiche, mentre verrà interrotta la supporto per l'uso implicito di proprietà inesistenti per proteggere gli sviluppatori da errori nascosti. Per mantenere la compatibilità con il codice esistente è stato proposto l'attributo «#[AllowDynamicProperties]», che consente l'uso di proprietà dinamiche.
- È stata fornita la possibilità di filtrare i parametri confidenziali nei dati di traccia dello stack, visualizzati durante un errore. L’omissione di determinate informazioni può essere necessaria quando i dettagli sugli errori che si verificano vengono automaticamente inviati a servizi di terze parti che monitorano i problemi e informano gli sviluppatori. Ad esempio, si possono escludere dalla traccia i parametri che includono nomi utente, password e variabili d'ambiente. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Errore'); } test('foo', 'password', 'baz'); Errore fatale: Eccezione non gestita: Errore in test.php:8 Traccia stack: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} lanciato in test.php alla linea 8
- È stata dichiarata obsoleta la possibilità di interpolazione dei valori delle variabili nelle stringhe utilizzando le espressioni '${var}' e ${(var)}. È stata mantenuta la supporto per le interpolazioni comunemente utilizzate '{$var}' e '$var'. Ad esempio: «Ciao {$world}»; OK «Ciao $world»; OK «Ciao ${world}»; Deprecato: Utilizzare ${} nelle stringhe è deprecato
- Sono stati dichiarati obsoleti gli oggetti chiamabili parzialmente supportati (callable), che possono essere invocati tramite 'call_user_func($callable)', ma non supportano la chiamata nella forma '$callable()': «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- È stata implementata una conversione indipendente dalla localizzazione del caso dei caratteri. Funzioni come strtolower() e strtoupper() ora convertono sempre il caso dei caratteri nel range ASCII anche quando la localizzazione è impostata su 'C'.
Fonte: opennet.ru
