devdev / in the loop

PHP 8: match vs switch

Tra le novità di PHP 8, c’è il nuovo match , più potente di switch , potrebbe essere una scelta migliore. Vediamo le differenze tra i due, partendo prima con il classico switch :

switch ($codice_http) {
    case 200:
        $messaggio = "OK";
        break;
    case 201:
        $messaggio = "OK";
        break;
    case 400:
        $messaggio = "Not found";
        break;
    default:
        $messaggio = "Stato sconosciuto";
}

Adesso, scriviamolo utilizzando match :

$messaggio = match ($codice_http) {
    200, 201 => "OK",
    400 => 'Not found',
    default => 'Stato sconosciuto',
};

Per prima cosa notiamo che l’espressione match è molto più breve:

  • non richiede break
  • può combinare più condizioni utilizzando la virgola
  • restituisce un singolo valore, quindi non c’è bisogno di scriverlo ogni volta

Potrebbe essere già abbastanza, ma ci sono altre feature interessanti

Stretta uguaglianza

match  esegue un controllo più stretto sul tipo, come avviene per l’operatore === :

$codice_http = '200';

$messaggio = match ($codice_http) {
    200 => "OK",
    default => 'Stato sconosciuto',
};

// $messaggio = 'Stato sconosciuto'

Gestione dell’errore

Nel caso non avessimo aggiunto il controllo per un valore e non c’è il default specificato, PHP farà il throw  dell’Exception UnhandledMatchError :

$codice_http = 400;

$messaggio = match ($codice_http) {
    200 => 'OK',
};

// UnhandledMatchError

Combinazione di condizioni

Abbiamo già visto la mancanza di break, ma probabilmente la novità più interessante è la possibilità di combinare le condizioni, scrivendo un codice più asciutto:

$messaggio = match ($codice_http) {
    200, 300, 301, 302 => 'combined expressions',
};

Possibilità di lanciare Exception

Data la modifica a throw in PHP 8, è possibile fare il throw  di una Exception direttamente da una condizione:

$messaggio = match ($codice_http) {
    200 => null,
    500 => throw new ServerError()
};

Switch o match?

match  è considerabile come la versione moderna di switch a tutti gli effetti. Probabilmente andrà a sostituirla nel corso del tempo, dato che risolve parecchie mancanze ed  ha una sintassi più asciutta.

Questo articolo ti è stato utile?
PHP – LETTURA 6 MINUTI PHP 8: l’operatore null-safe
L’introduzione dell’operatore null coalescing con PHP 7 è stato un buon passo avanti per la pulizia del codice, ma non…
Laravel – LETTURA 4 MINUTI Aggiungere phpMyAdmin a Laravel Sail
Anche se a questo punto lo sapete già, è giusto dire che phpMyAdmin è sicuramente il tool dbms open  source…
PHP – LETTURA 4 MINUTI Usare glob() in PHP per elencare i file di una directory
Spesso abbiamo utilizzato (lo so, l’avete fatto anche voi) la combinazione di opendir(), readdir() e closedir() per elencare i file…
PHP – LETTURA 5 MINUTI Installare PHP su macOS Monterey con homebrew (anche su M1)
L’ultima versione di macOS 12 Monterey non porta più con sé preinstallato PHP. Difatti, una nota nel conf http.conf di…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.