Released!
PHP 8.0 è una nuova versione major del linguaggio PHP.
Contiene molte nuove funzionalità ed ottimizzazioni quali i named arguments, la definizione di tipi unione, gli attributi, la promozione a proprietà degli argomenti del costruttore, l'espressione match, l'operatore nullsafe, la compilazione JIT e miglioramenti al sistema dei tipi, alla gestione degli errori e alla consistenza.

Named arguments RFC

PHP 7
PHP 8
  • Indica solamente i parametri richiesti, saltando quelli opzionali.
  • Gli argomenti sono indipendenti dall'ordine e auto-documentati.

Attributi RFC Doc

PHP 7
PHP 8

Invece delle annotazioni PHPDoc, ora puoi usare metadati strutturati nella sintassi nativa PHP.

Promozione a proprietà degli argomenti del costruttore RFC Doc

PHP 7
x = $x; $this->y = $y; $this->z = $z; } }', );?>
PHP 8

Meno ripetizioni di codice per definire ed inizializzare le proprietà.

Tipi unione RFC Doc

PHP 7
number = $number; } } new Number(\'NaN\'); // Ok', );?>
PHP 8

Invece di indicare una combinazione di tipi con le annotazioni PHPDoc, puoi usare una dichiarazione nativa di tipo unione che viene validato durante l'esecuzione.

Espressione match RFC Doc

PHP 7
Oh no!', );?>
PHP 8
"Oh no!", 8.0 => "This is what I expected", }; //> This is what I expected', );?>

La nuova espressione match è simile allo switch e ha le seguenti funzionalità:

  • Match è un'espressione, ovvero il suo risultato può essere salvato in una variabile o ritornato.
  • I rami del match supportano solo espressioni a singola linea e non necessitano di un'espressione break;.
  • Match esegue comparazioni strict.

Operatore nullsafe RFC

PHP 7
user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } }', );?>
PHP 8
user?->getAddress()?->country;', );?>

Invece di controllare la presenza di un null, puoi ora usare una catena di chiamate con il nuovo operatore nullsafe. Quando la valutazione di un elemento della catena fallisce, l'esecuzione della catena si interrompe e l'intera catena restituisce il valore null.

Comparazioni più coerenti di stringhe e numeri RFC

PHP 7
PHP 8

Nella comparazione di una stringa numerica, PHP 8 usa la comparazione numerica. Altrimenti, converte il numero in una stringa e usa la comparazione tra stringhe.

Tipi di errori consistenti per le funzioni native RFC

PHP 7
PHP 8

La maggior parte delle funzioni native ora lanciano una eccezione Error se la validazione degli argomenti fallisce.

Compilazione Just-In-Time

PHP 8 intrduce due motori di compilazione JIT. Tracing JIT, il più promettente dei due, mostra delle prestazioni 3 volte superiori nei benchmarks sintetici e 1.5–2 volte superiori per alcuni specifici processi applicativi a lunga esecuzione. Le prestazioni delle tipiche applicazioni web sono al pari con PHP 7.4.

Miglioramenti delle performance in PHP 8 grazie a JIT

Just-In-Time compilation

Sistema dei tipi e miglioramenti alla gestione degli errori

  • Controlli più stringenti per gli operatori aritmetici e bitwise RFC
  • Validazione dei metodi astratti nei trait RFC
  • Firme corrette nei metodi magici RFC
  • Riclassificazione degli errori RFC
  • Errori fatali per firme di metodi non compatibili RFC
  • L'operatore @ non silenzia più gli errori fatali.
  • Ereditarietà e metodi privati RFC
  • Tipo mixed RFC
  • Tipo di ritorno static RFC
  • Tipi per le funzioni native Email thread
  • Oggetti opachi invece che risorse per le estensioni Curl, Gd, Sockets, OpenSSL, XMLWriter, e XML

Altre ritocchi e migliorie di sintassi

  • Permessa una virgola finale nella lista dei parametri RFC e nell'espressione use per le closure RFC
  • Catch senza argomento RFC
  • Correzioni alla sintassi di variabile RFC
  • Trattamento dei nomi di namespace come un singolo token RFC
  • Throw è ora un'espressione RFC
  • Permesso l'utilizzo di ::class sugli oggetti RFC

Nuove classi, interfacce e funzioni