Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 15 di 67
  • livello intermedio
Indice lezioni

If, else, istruzioni condizionali in PHP

Impariamo ad utilizzare le istruzioni condizionali di PHP, "if", "if-else" e "if-else-elseif" per determinare la generazione di risultati sulla base di condizioni specifiche.
Impariamo ad utilizzare le istruzioni condizionali di PHP, "if", "if-else" e "if-else-elseif" per determinare la generazione di risultati sulla base di condizioni specifiche.
Link copiato negli appunti

Nel corso delle lezioni precedenti è stato possibile analizzare alcuni frammenti di codice in cui venivano eseguite operazioni in base a determinate condizioni. Questo è possibile grazie alle istruzioni condizionali che ci consentono di avere comportamenti differenti all'interno del nostro codice in base a specifiche condizioni.

if

L'istruzione if è forse la più rappresentativa tra le strutture di controllo del flusso: ci permette di eseguire o non eseguire certe porzioni di codice. Esaminiamone la sintassi più elementare:

if( <condizione> ) <istruzione>

Dopo la keywork if, deve essere indicata fra parentesi un'espressione da valutare (condizione). Questa espressione sarà valutata in senso booleano, cioè il suo valore sarà considerato vero o falso.

Dunque, se la condizione è vera, l'istruzione successiva verrà eseguita, altrimenti sarà ignorata.

Spesso, al verificarsi della condizione, abbiamo la necessità di eseguire non una sola ma più istruzioni. Questo è perfettamente possibile, ricordandoci che possiamo utilizzare i blocchi di istruzioni compresi fra parentesi graffe.

$nome = 'Luca';
$messaggi = 10;
if ($nome == 'Luca') {
    $messaggi = 5;
    echo "Ciao Luca,<br>";
    echo "Bentornato sul nostro sito Web!<br>";
}
echo "Ti restano $messaggi messaggi da inviare";

Se la variabile $nome ha effettivamente il valore "Luca", le istruzioni successive, comprese tra parentesi graffe, saranno eseguite. Dopo avere valutato la condizione ed eventualmente eseguito le istruzioni previste, lo script proseguirà con ciò che sta fuori dalle parentesi graffe. Quindi verrà mostrato il numero di messaggi relativi all'utente corrente. Nel nostro caso corrisponderà  a "5", dato che la variabile $messaggi è stata modificata all'interno delle parentesi graffe.

Se l'istruzione da eseguire nel caso in cui la condizione sia vera è una sola, le parentesi graffe sono opzionali.

if ($nome == 'Luca')
    echo "Ciao Luca!";
if ($nome == 'Luca') {
    echo "Ciao Luca!";
}

I due costrutti appena proposti si equivalgono nel risultato.

NOTA: E' buona norma usare comunque le parentesi graffe per delimitare il codice condizionato, anche quando esso è costituito da una sola istruzione: infatti questo accorgimento sintattico rende il codice più leggibile, ed inoltre potrebbe limitare gli errori se dovesse capitare di voler aggiungere delle istruzioni al blocco dimenticando di aggiungere le graffe.

Condizioni booleane

Se l'espressione da valutare non dovesse restituire un valore booleano, PHP convertirà comunque questo valore in booleano utilizzando alcune precise regole. Esaminiamo un altro semplice esempio:

if (5) {
    print "Ciao Luca!";
}

Questo codice, da un punto di vista logico, non ha nessun senso, ma ci permette di capire come PHP interpreta le nostre espressioni. Infatti in questo caso la stringa "Ciao Luca!" verrà stampata comunque. Questo perché in PHP il valore "5", così come qualsiasi numero diverso da "0", è considerato vero (TRUE).

In sostanza, PHP considera come falsi:

  • il valore numerico "02, nonché una stringa che contiene '0';
  • una stringa vuota;
  • un array con zero elementi;
  • un valore NULL, cioè una variabile che non è stata definita o che è stata eliminata con unset(), oppure a cui è stato assegnato il valore NULL esplicitamente.

Qualsiasi altro valore è per PHP un valore vero. Quindi qualsiasi numero, intero o decimale purché diverso da "0", qualsiasi stringa non vuota, se usati come espressione condizionale saranno considerati veri.

Operatori di uguaglianza (==) e assegnamento (=)

Analizziamo ora un caso che spesso crea dei problemi in fase di sviluppo se non viene compreso fin dalle prime battute. Prendiamo questo codice come esempio:

$a = 7;
if ($a = 4) echo '$a è uguale a 4!';

A prima vista possiamo lasciarci ingannare da queste istruzioni, soprattutto se abbiamo esperienza con linguaggi di programmazione in cui un'espressione come $a = 4 potrebbe essere sia un'assegnazione che un test. Se pensiamo che che questo blocco di codice non stampi niente, rimarremo sorpresi di vedere invece sul browser la frase '$a è uguale a 4'.

L’espressione che abbiamo messo fra parentesi è un'assegnazione: cioè essa assegna alla variabile $a il valore "4". L'istruzione seguente viene quindi eseguita per il motivo che abbiamo visto prima: il valore della nostra espressione è 4, che per PHP equivale a un vero booleano. Se invece di if ($a = 4) avessimo scritto if ($a = 0) l'istruzione seguente sarebbe stata saltata, perché la nostra condizione avrebbe preso valore "0", cioè falso.

Per ottenere il risultato corretto logicamente, avremmo dovuto utilizzare l'operatore di confronto (==):

$a = 7;
if ($a == 4) echo '$a è uguale a 4!';

Ricordiamoci quindi di utilizzare l'operatore condizionale di uguaglianza, il doppio uguale (==) per le comparazioni.

else

Negli esempi di codice visti finora avremo sicuramente notato che vengono effettuate operazioni solo nel caso in cui una condizione sia vera. Non eseguiamo invece nulla nel caso in cui questa risulti falsa. Per eseguire istruzioni se la condizione è falsa abbiamo bisogno del costrutto else.

if (<condizione>) {
    <codice>
} else {
    <codice>
}

La parola chiave else, che significa "altrimenti", deve essere posizionata subito dopo la parentesi graffa di chiusura del codice previsto per il caso "vero" (o dopo l'unica istruzione prevista, se non abbiamo usato le graffe). Anche per else valgono le stesse regole: niente punto e virgola, parentesi graffe obbligatorie se dobbiamo esprimere più di un'istruzione, altrimenti facoltative. Ovviamente il blocco di codice specificato per else verrà ignorato quando la condizione è vera, mentre verrà eseguito se la condizione è falsa.

Le istruzioni if possono essere nidificate una dentro l'altra, consentendoci così di creare codice di una certa complessità:

if ($nome == 'Luca') {
    if ($cognome == 'Rossi') {
        echo "Luca Rossi è di nuovo fra noi";
    } else {
        echo "Abbiamo un nuovo Luca!";
    }
} else {
    echo "ciao $nome!";
}

In questo caso, abbiamo nidificato un ulteriore test all'interno del primo caso, quello in cui $nome ha il valore "Luca". Abbiamo infatti previsto un messaggio diverso, a seconda del valore della variabile $cognome.

elseif

Un'ulteriore possibilità che ci fornisce l'istruzione if in PHP è quella di utilizzare la parola chiave elseif. Attraverso quest'ultima possiamo indicare una seconda condizione, da valutare solo nel caso in cui quella precedente risulti falsa. Indicheremo quindi, di seguito, il codice da eseguire nel caso in cui questa condizione sia vera, ed eventualmente, con else, il codice previsto per il caso in cui anche la seconda condizione sia falsa.

if ($nome == 'Luca') {
    echo "bentornato Luca!";
} elseif ($cognome == 'Verdi') {
    echo "Buongiorno, signor Verdi";
} else {
    echo "ciao $nome!";
}

In questo caso, abbiamo un'istruzione da eseguire quando $nome vale "Luca" nel caso in cui ciò non sia vero, è prevista una seconda istruzione se $cognome è "Verdi"; se nemmeno questo è vero, allora verrà eseguita la terza istruzione. Da notare che, se $nome è "Luca" e $cognome è "Verdi", viene comunque eseguita solo la prima istruzione, perché dopo avere verificato la condizione, tutti gli altri casi vengono ignorati.

Ti consigliamo anche