Rilascio del linguaggio di programmazione PHP 8.4

Dopo un anno di sviluppo, è stato rilasciato il linguaggio di programmazione PHP 8.4. Questa nuova versione include una serie di nuove funzionalità, oltre a diverse modifiche che interrompono la compatibilità.

Modifiche chiave in PHP 8.4:

  • È stata proposta una nuova implementazione del compilatore JIT, basata sul Framework IR. La principale differenza è che il vecchio JIT generava direttamente istruzioni macchina basate sul bytecode e utilizzando diversi backend per le architetture x86_64 e AArch64, mentre il nuovo JIT utilizza un backend unificato per tutte le architetture e genera una rappresentazione intermedia (IR), che viene poi ulteriormente ottimizzata e trasformata in istruzioni macchina per la piattaforma target.
  • È stata aggiunta la supporto per i 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 interrompere le operazioni di lettura e scrittura tramite le funzioni comuni __get e __set e senza creare ulteriori metodi di wrap. L'uso dei gestori di proprietà consente di ridurre notevolmente il volume di codice e semplificare la ridefinizione del comportamento della gestione delle proprietà, grazie all'associazione del 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 a metodi nella costruzione «new» senza parentesi separative, ovvero invece di «$name = (new MyClass())->$method()» ora si può scrivere «$name = new MyClass()->method()».
  • È stata aggiunta la possibilità di gestire asimmetricamente la visibilità delle proprietà degli oggetti (pubblica, privata, protetta), separatamente per le operazioni di scrittura (set) e lettura (get). Ad esempio: class PhpVersion { public private(set) string $version = ‘8.4’; } $phpVersion = new PhpVersion(); var_dump($phpVersion->version); // string(3) «8.4» $phpVersion->version = ‘PHP 8.3’; // errore
  • È fornito il supporto nativo per oggetti «pigri» (lazy), la cui inizializzazione avviene al primo utilizzo.
  • Invece del parametro generale «opcache.jit_buffer_size» per gestire il compilatore JIT 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». Sono state apportate modifiche per ridurre il consumo di memoria e migliorare le prestazioni del JIT in alcune situazioni.
  • È stato aggiunto l'attributo «#[\Deprecated]», destinato a contrassegnare funzioni, classi e metodi obsoleti. #[\Deprecated(«usa newFunction() invece», since: «1.1»)] function oldFunction() { // … }
  • È 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).
  • Sono state aggiunte le funzioni array_find(), array_find_key(), array_any() e array_all(). Le funzioni array_find() e array_find_key() restituiscono il primo elemento o la chiave in un array per il quale è scattata una verifica, definita tramite una callback specificata dall'utente. A loro volta, le funzioni array_any() e array_all() restituiscono qualsiasi elemento corrispondente e tutti gli elementi corrispondenti. Ad esempio, per visualizzare il primo elemento il cui campo title supera i 5 caratteri, si può scrivere: $firstMatch = array_find( $posts, function (Post $post) { return strlen($post->title) > 5; } );
  • Sono stati aggiunti i metodi DateTime::getMicrosecond() e DateTimeImmutable::setMicrosecond($microsecond) per ottenere e impostare il tempo con precisione ai microsecondi, oltre al metodo DateTime::createFromTimestamp().
  • In PDO (PHP Data Objects), l'interfaccia astratta per lavorare con i database, è stata aggiunta la possibilità di creare parser SQL e sottoclassi specifiche per determinati driver di DBMS. Sono state aggiunte nuove sottoclassi Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc e Pdo\Sqlite.
  • Sono state aggiunte nuove funzioni mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() e bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
  • Le operazioni exit e die possono ora essere chiamate nella forma di vere e proprie funzioni, che è possibile passare come argomento ad altre funzioni. In precedenza, le funzionalità delle funzioni exit() e die() erano fortemente limitate, in quanto rappresentavano dei wrapper per le parole chiave exit e die.
  • Sono state apportate modifiche che complicano l'esploizione delle vulnerabilità causate da overflow del buffer, oltre a rafforzare la randomizzazione dei nomi dei file creati tramite la funzione tempnam().
  • È stato dichiarato obsoleto il comportamento secondo cui per i parametri delle funzioni con un valore predefinito assegnato a null era consentito 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 specificare «function save(?Book $book = null) {}».
  • Sono state dichiarate obsolete le costanti E_STRICT, MYSQLI_REFRESH_*, le funzioni mysqli_ping(), mysqli_kill(), mysqli_refresh(), i metodi mysqli::ping(), mysqli::kill(), mysqli::refresh(), la possibilità di usare «_» come nome di classe, alcune proprietà DOMDocument e DOMEntity. È vietato sovrascrivere le costanti della classe GMP, per la quale è stata ora impostata la parola chiave «final».

In aggiunta, è possibile notare il rilascio dell'analizzatore statico PHPStan 2.0, che consente di individuare errori nel codice PHP senza eseguirlo e senza utilizzare unit test. L'analizzatore offre 10 livelli, coprendo aree come l'individuazione di variabili non definite, classi sconosciute, funzioni e metodi; verifica dei tipi di argomenti e dei valori di ritorno; corretto utilizzo di alcuni tipi; e identificazione di codice mai eseguito. Il codice del progetto è scritto in PHP e distribuito sotto licenza MIT.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster