PHP versione 8 in arrivo: tutte le novità 

Aggiornato il: 25-10-2020 17:46
Stando alla pianificazione ufficiale diffusa nel sito PHP.net, la versione 8 del linguaggio per il web più utilizzato e popolare al mondo dovrebbe andare in release pubblica a dicembre 2020; in questa data, infatti, dovrebbe vedere la luce la prima versione stable. Di conseguenza, ci si aspetta che i vari servizi di hosting vadano ad adeguarsi alla nuova versione del linguaggio già  verso la metà  del prossimo anno.

PHP 8 è anche oggetto di un talk di Sebstian Bergmann, che entra nel merito con dettagli tecnici e performativi rispetto a questa nuova ed attesissima versione del linguaggio. Tra le novità  più attese, l’introduzione di nuove interfacce e funzioni per il DOM PHP, l’introduzione di nuove funzioni di pattern matching e debug, l’uso del compilatore JIT di default, attributi per le variabili e nuovi tipi di costruttori per le classi.

Compilatore Just In Time (JIT)

Le novità  di PHP 8 passano anzitutto per l’introduzione e consolidamento di un compilatore Just-In-Time, che era già  disponibile dalla versione 7.4 del linguaggio (e che ho già  sperimentato con successo nell’ambito dell’implementazione di OPCache). In genere un compilatore just-in-time (JIT) permette un tipo di compilazione del codice scritto in PHP più veloce e performante, in  quanto viene ridotto notevolmente il tempo necessario per l’esecuzione degli script e la generazione di un bytecode più veloce da eseguire rispetto al caso ordinario.

Con la versione PHP 8 tutto questo farà  un ulteriore passo avanti, per quando (stando alle specifiche ufficiali) non è detto che WordPress e CMS simili scritti in PHP ne riescano ad usufruire facilmente. I test di benchmark sul JIT, di fatto, sono effettuati e apprezzabili soltanto nel caso in cui il codice venga sfruttato per la generazione di frattali, o comunque per sfruttare determinate caratteristiche del linguaggio PHP che non sempre, lato web, vengono utilizzate.

Sulla sinistra, in questo esempio (fonte) è possibile vedere una generazione di frattali con PHP standard, più lenta e “a scatti”, mentre a destra si può vedere l’elaborazione più fluida ottenibile con l’integrazione di un compilatore JIT.

giphy

Una novità  che, a conti fatti, rischia un po’ di essere un uovo di colombo (quel benchmarch è visualmente efficace ma difficile da applicare nella pratica dei siti web, alla fine), senza contare che per gli informatici non è nemmeno una novità  colossale (la modalità  JIT esisteva già  su vari linguaggi e framework da anni, e non sarà  certo una salvezza per chi poi dovrà  effettuare debug e manutenzione del codice). Porta sicuramente vantaggi interessanti in potenziale, ma il rischio è che la corsa all’aggiornamento si riveli più problematica che altro.

Pattern matching ottimizzato

Chiunque debba effettuare la ricerca di un pattern in una stringa sa bene quanto l’operazione, formalmente semplice sulla carta, possa rivelarsi complessa all’atto pratico. Storicamente il pattern matching tra stringhe si può effettuare mediante regex (espressioni regolari) oppure mediante strpos, che pero’ ha una sintassi francamente un po’ ostica da comprendere e ricordare.

PHP 8 ha introdotto una nuova funzione:

str_contains ( $ago, $pagliaio ) 

che restituisce true o false se la stringa $ago è contenuta nel $pagliaio. Per cercare all’inizio e solo alla fine di una stringa, similmente, sono introdotte le funzioni:

str_starts_with ( $ago, $pagliaio )
 str_ends_with( $ago, $pagliaio ) 

che restituiscono sempre un valore boolean true o false.

Constructor Property Promotion

Questa feature permette al programmatore PHP di risparmiarsi righe di codice, inserendo direttamente le proprietà  da modificare (campi di variabili private) all’interno del costruttore della classe, per cui una classe del genere, vagamente ridondante nella sua definizione:

class LaMiaClasse
{
    public string $nome;

    public function __construct(
        string $nome = 'Pippo'
    ) {
        $this->nome = $nome;
    }
}

sarà  equivalente alla nuova sintassi compatta:

class LaMiaClasse
{
    public function __construct(
        public string $nome = 'Pippo',
    ) {}
}

Attributi v2

A partire dalla versione 8 di PHP, saranno disponibili gli attributi per le variabili, da inserire nel codice nella forma:

<<attributo>>

Debug: throw e rilevazione in real time del tipo di una variabile

Storicamente il tipo di una variabile PHP poteva essere rilevato a runtime mediante instanceof:

if ( ($x instanceof Foo) ) { 
	// se $x è un oggetto di tipo Foo, fai robe...
}

con PHP 8 si può usare in combinazione con la nuova funzione get_debug_type:

if ( !($x get_debug_type Foo) ) {

// se $x NON è un oggetto di tipo Foo

echo "oggetto x di tipo: ". get_debug_type($x); }

Sempre a livello di debug, con PHP 8 è possibile usare la funzione throw in modo più autonomo, come se fosse una funzione stand alone, e non solo in caso di specifiche Exception.

Uso dei trait con firma digitale

Si propone un uso più uniforme dei trait PHP, sfruttando le indicazioni di un nuovo RFC che esprime la necessità  di firmare digitalmente le chiamate ad un metodo contenuto in un trait, lanciando eventualmente un’eccezione specifica in caso di violazioni.

Uso delle interface con firma digitale

Si fa un discorso simile a quello visto per i trait, solo che qui varrà  per le interfacce (interface) delle classi.

Indici negativi consecutivi

Viene inserito by default il fatto che se inizializzo un array con indice negativi, i successivi indici utilizzati – ad esempio in caso di uso della funzione push() – possano essere sfruttati non più a partire da 0, bensଠdai numeri successivi. AD esempio se inserisco un elemento in posizione -7, gli altri inserimenti saranno in corrispondenza di -6, -5 e -4.

array(4) {
	[-7]=>
	'PHP'
	[-6]=>
	'versio 8'
	[-5]=>
	'cambierà '
	[-4]=>
	'molte cose'
}

Union Types

PHP 8 supporterà  gli Union Types, ovvero le variabili o i record che possono assumere uno o più tipi (ad esempio float o integer), consentendo cosଠuna maggiore flessibilità  in fase di programmazione.

Ulteriori novità 

Sono previsti infine un supporto migliorato per le weak maps, nuova sintassi ::class ammessa nel linguaggio, errori di tipo ottimizzati, possibilità  di concludere l’elenco di parametri di una funzione con una virgola. (fonte: wiki.php.net)



Questo blog pubblica contenuti ed offre servizi free da 11 anni. – Leggi un altro articolo a caso – Per informazioni contattaci
Non ha ancora votato nessuno.

Ti piace questo articolo? Vota e fammelo sapere.

PHP versione 8 in arrivo: tutte le novità 
SMSHosting Usa il codice PROMO per uno sconto sul primo acquisto: PRT96919
php 8 novità
Torna su