Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PHP 8.0: tutte le novità della nuova versione

PHP 8.0 è stato rilasciato lo scorso 26 Novembre: scopriamo insieme le principali novità che la nuova versione introduce in questo linguaggio
PHP 8.0: tutte le novità della nuova versione
PHP 8.0 è stato rilasciato lo scorso 26 Novembre: scopriamo insieme le principali novità che la nuova versione introduce in questo linguaggio
Link copiato negli appunti

PHP è uno dei linguaggi di programmazione più diffusi al mondo. Proprio la sua larghissima diffusione, ha portato tanti programmatori ad utilizzarlo, soprattutto per lo sviluppo delle logiche di business lato server delle applicazioni web.

Al di là delle numerose critiche che continua a ricevere, PHP è tuttora tra i primi 10 linguaggi più utilizzati al mondo. Ed è anche per questo motivo che le novità introdotte in PHP 8.0 (rilasciato il 26 novembre scorso) ricoprono una significativa importanza in tutte le comunità di sviluppatori web.

In questo articolo cercheremo quindi di riassumere le principali novità di questa nuova versione di PHP.

Passaggio di argomenti per nome

Una nuova caratteristica introdotta in PHP 8 è quella dei named arguments, che permetterà di eseguire una funzione passando un argomento per nome, e non semplicemente in base alla posizione. Ad esempio, immaginiamo di definire la funzione seguente:

function test(string $a, string $b, ?string $c = null, ?string $d = null)
{
    /* … */
}

Potremo a questo punto eseguire la funzione così:

test(b: 'arg1', a: 'arg2', d: 'arg3',
);

Tale possibilità rende più leggibile il codice, senza peraltro rimuovere o limitare le possibilità fornite dalle versioni precedenti del linguaggio. Già altri linguaggi di programmazione permettono di passare gli argomenti per nome oltre che per posizione (ad esempio Python), e certamente questa aggiunzione farà piacere a molti sviluppatori.

Attributi

Con PHP 8 sono stati introdotti anche gli attributi, spesso noti in altri linguaggi come annotazioni. Si tratta sostanzialmente di un meccanismo per aggiungere metadati alle classi, cosa finora possibile unicamente inserendoli all'interno dei blocchi di commenti multi-riga. In altre parole, in PHP 7 e versioni precedenti, eravamo costretti a procedere in questo modo:

class PostsController
{
    /**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    public function get($id) { /* ... */ }
}

Con la nuova versione di PHP, il codice summenzionato diventa simile al seguente:

class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }
}

Promozione delle proprietà definite nel costruttore

Un'altra semplificazione del codice riguarda la definizione e promozione delle proprietà di una classe direttamente all'interno del costruttore. Questa modifica (che riprende anch'essa la sintassi di Python e di altri linguaggi) permette di ridurre significativamente le righe di codice richieste per la definizione della struttura di una classe, come si evince dal codice seguente:

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

Union types

Gli union types sono forse una delle novità più innovative della nuova versione di PHP. Data la tipizzazione dinamica di PHP, vi sono molti casi in cui può essere utile specificare più tipi di dato possibili per un parametro, anziché poterlo fare solo nelle annotazioni. La nuova sintassi introdotta permette di fare esattamente questo, come mostrato nel codice che segue:

public function foo(Classe1|Classe2 $input): int|float;

Si noti che il tipo void non può mai essere parte di uno union type. Inoltre, è possibile specificare delle unioni di tipi che siano nullable, utilizzando la sintassi |null, oppure tramite la notazione con il punto interrogativo (?):

public function foo(ClasseX|null $foo): void;
 
public function bar(?ClasseY $bar): void;

Match

PHP 8 introduce anche un nuovo costrutto, molto simile allo switch, identificato dalla parola chiave match. Per certi versi, lo si può considerare una sorta di "fratello maggiore" dello switch, e le similitudini dovrebbero essere abbastanza intuibili dallo snippet seguente:

$result = match($input) {
    0 => "hello",
    '1', '2', '3' => "world",
};

Tra le funzionalità implementate da match, citiamo la possibilità di ritornare valori, il fatto che esso non richieda la presenza delle istruzioni break, e la possibilità di combinare più condizioni.

Operatore nullsafe

È stata introdotta una nuova sintassi che evita la verifica che una variabile o il valore di ritorno di un metodo siano null. L'operatore nullsafe consente infatti di implementare tutto ciò in un'unica riga: ogni volta che la valutazione di un elemento fallisce, l'esecuzione dell'intera catena di chiamate viene interrotta, ed il valore di ritorno vale null.

Ecco un esempio:

$country = $session?->user?->getAddress()?->country;

Altre novità di PHP 8

Oltre a tutte le novità appena descritte, ve ne sono molte altre altrettanto interessanti. Una, ad esempio, è la compilazione Just-In-Time (o JIT), che stando a quanto dichiarato dal team di sviluppo di PHP, dovrebbe migliorare le performance, riducendo di un terzo il tempo di compilazione, soprattutto in certi casi d'uso.

È stata inoltre introdotta la possibilità di utilizzare la parola chiave static come tipo di ritorno, il cui uso è definito e descritto estensivamente in questa RFC:

class Test
{
    public function test(): static
    {
        return new static();
    }
}

A queste si aggiungo moltissime altre novità; il modo migliore per ottenere una panoramica esaustiva è dare un'occhiata alle note di rilascio di PHP 8, che includono una lunga carrellata di esempi e link.

Ti consigliamo anche