Rilascio del linguaggio di programmazione PHP 8.2

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

Miglioramenti chiave in PHP 8.2:

  • Aggiunta la possibilità di contrassegnare una classe come di sola lettura. Le proprietà in tali classi possono essere impostate una sola volta, dopodiché non saranno più disponibili per la modifica. In precedenza, le singole proprietà delle classi potevano essere contrassegnate come di sola lettura, ma ora puoi attivare questa modalità per tutte le proprietà delle classi contemporaneamente. La specifica del flag "sola lettura" 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->sconosciuto = 'sbagliato'; // Errore: impossibile creare la proprietà dinamica Post::$unknown
  • Aggiunti tipi separati “true”, “false” e “null”, che possono assumere un solo valore valido e vengono utilizzati, ad esempio, per restituire una funzione con un flag di terminazione di errore o un valore vuoto. In precedenza, "true", "false" e "null" potevano essere utilizzati solo insieme ad altri tipi (ad esempio, "string|false"), ma ora possono essere utilizzati separatamente: function sempreFalse(): false { return false ; }
  • Fornita la possibilità di filtrare le impostazioni riservate nell'output della traccia dello stack al momento di un errore. Potrebbe essere necessario eliminare determinate informazioni quando le informazioni sugli errori che si verificano vengono inviate automaticamente a servizi di terze parti che tengono traccia dei problemi e ne informano gli sviluppatori. Ad esempio, è possibile escludere dalla traccia i parametri che includono nomi utente, password e variabili di ambiente. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Errore irreversibile: eccezione non rilevata: errore in test.php:8 Traccia dello stack: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} gettato in test.php sulla riga 8
  • È consentito definire costanti nei tratti (tratto, un meccanismo per riutilizzare il codice). È possibile accedere alle costanti definite in un tratto tramite la classe che utilizza il tratto (ma non tramite il nome del tratto). tratto Foo { public const COSTANTE = 1; funzione pubblica bar(): int { return self::COSTANTE; // Errore fatale } } class Bar { use Foo; } var_dump(Bar::COSTANTE); // 1
  • Aggiunta la possibilità di specificare tipi nella forma normale disgiuntiva (DNF, Disjuntive Normal Form), che permette di combinare l'unione di tipi (raccolte di due o più tipi) e l'intersezione di tipi (tipi i cui valori ricadono in più tipi tipi contemporaneamente). class Foo { funzione pubblica bar((A&B)|null $entità) { if ($entità === null) { return null; } restituisce $entità; } }
  • È stata proposta una nuova estensione “Random” con funzioni e classi per generare numeri e sequenze pseudo-casuali. Il modulo fornisce un'interfaccia orientata agli oggetti, consente di selezionare diversi motori per la generazione di numeri pseudocasuali, compresi quelli adatti all'uso in crittografia, e fornisce funzioni ausiliarie, ad esempio, per mescolare casualmente array e stringhe, selezionare chiavi di array casuali, utilizzo simultaneo di più generatori con il proprio stato indipendente. $rng = $è_produzione ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizzatore = nuovo Casuale\Randomizzatore($rng); $randomizer->shuffleString('foobar');
  • Conversione maiuscole/minuscole indipendente dalle impostazioni locali implementata. Funzioni come strtolower() e strtoupper() ora convertono sempre maiuscole e minuscole dei caratteri nell'intervallo ASCII, come quando si imposta la localizzazione su "C".
  • Aggiunte nuove funzioni: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodio_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Aggiunti nuovi metodi: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • La possibilità di creare dinamicamente proprietà in una classe è stata deprecata. In PHP 9.0, l'accesso alle proprietà che non sono inizialmente definite nella classe risulterà in un errore (ErrorException). Le classi che forniscono metodi __get e __set per la creazione di proprietà o proprietà dinamiche in stdClass continueranno a funzionare invariati, sarà supportato solo il lavoro implicito con proprietà inesistenti per proteggere lo sviluppatore da bug nascosti. Per preservare il lavoro del vecchio codice, viene proposto l'attributo “#[AllowDynamicProperties]”, che consente l'utilizzo di proprietà dinamiche.
  • La possibilità di sostituire i valori delle variabili in stringhe utilizzando le espressioni "${var}" e ${(var)}" è stata deprecata. Il supporto per le sostituzioni "{$var}" e "$var" di uso comune è stato mantenuto. Ad esempio: "Ciao {$world}"; OK "Ciao $mondo"; OK "Ciao ${mondo}"; Deprecato: l'uso di ${} nelle stringhe è deprecato
  • Chiamabili parzialmente supportati deprecati che possono essere chiamati 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"]
  • Alle impostazioni è stata aggiunta la direttiva error_log_mode che consente di determinare la modalità di accesso al log degli errori.

Fonte: opennet.ru

Aggiungi un commento