If, If-else, if-elseif-else, if ramificati, switch, exit  

 di seguito descriviamo i costrutti sopra citati


f

Il costrutto if è una delle più importanti caratteristiche di qualsiasi linguaggio, incluso PHP.

Permette l 'esecuzione condizionata di frammenti di codice.

La struttura di controllo if di PHP è simile a quella del linguaggio C:

 if (espressione)

istruzione

Come descritto nella sezione sulle espressioni, espressione restituirà il suo valore booleano.

Se espressione vale TRUE, PHP eseguirà istruzione, e se essa vale FALSE la ignorerà.

L 'esempio che segue visualizzerà a è maggiore di b se $a sarà maggiore di $b:

 

if ($a > $b) print "a è maggiore di b";

 

Spesso sarà necessario eseguire più di una istruzione condizionale.

Naturalmente non è necessario, utilizzare una singola clausola if per ciascuna istruzione.

Si possono raggruppare diverse istruzioni in un singolo gruppo di istruzioni.

Per esempio, il codice che segue visualizzerà a è maggiore di b se $a è maggiore di $b, e successivamente assegnerà il valore della variabile $a alla variabile $b:

if ($a > $b)

{

print "a è maggiore di b";

$b = $a;

}

Si possono annidare indefinitamente istruzioni if, la qual cosa fornisce piena flessibilità per la esecuzione di istruzioni condizionali in diversi punti del programma.

else

Spesso è necessario eseguire un istruzione se una proposizione è vera e un altra istruzione se la proposizione è falsa.

Per questo si usa la clausola else. else estende il costrutto if aggiungendo la possibilità di eseguire un istruzione se l'espressione nel ramo if è FALSE.

L' esempio che segue visualizzerà a è maggiore di b se $a è maggiore di $b e a NON è maggiore di b altrimenti:

 if ($a > $b)

{

print "a è maggiore di b"; }

else

{

print "a NON è maggiore di b";

}

Il ramo else viene eseguito solo se l'espressione nel ramo if è FALSE, e, nel caso ci fossero delle clausole elseif, solamente se le espressioni in esse contenute fossero anch'esse FALSE (vedere elseif).

elseif

elseif, come è facile intuire, è una combinazione di if ed else.

Analogamente ad else, estende if aggiungendo la possibilità di eseguire un altra istruzione nel caso in cui l' espressione contenuta nel ramo if sia FALSE.

Però, a differenza di else, si eseguirà l'istruzione alternativa solamente se l'espressione contenuta nel ramo elseif sarà TRUE.

L' esempio che segue, visualizzerà a è maggiore di b, a è uguale a b oppure a è minore di b:

if ($a > $b)

{

print "a è maggiore di b";

}

elseif ($a == $b)

{

print "a è uguale a b";

}

else

{

print "a è minore di b";

}

 

Nel medesimo blocco if possono essere presenti più di una clausola elseif.

Verrà eseguita l'istruzione del primo ramo elseif la cui espressione sia TRUE.

In PHP è possibile scrivere else if  (due parole) e il significato sarà lo stesso di elseif  (una sola parola).

Il significato sintattico è leggermente differente (se si ha familiarità con il linguaggio C, esso ha lo stesso comportamento) però al lato pratico l'effetto è il medesimo.

L'istruzione di un ramo elseif verrà eseguita solo se l'espressione del ramo if e le espressioni dei rami elseif precedenti sono FALSE, e se l'espressione del ramo elseif è TRUE.

 

 

Switch

Quando l'esecuzione di un blocco di istruzioni piuttosto che un altro dipende dal valore di una espressione può essere conveniente usare il costrutto switch.

switch è simile a una serie di if sulla stessa espressione.

In molti casi può essere necessario confrontare una variabile (o espressione) con differenti valori ed eseguire un differente blocco di istruzioni a seconda del valore di detta variabile.

Questo è esattamente quello che fa la struttura di controllo switch.

Gli esempi seguenti mostrano due maniere differenti di scrivere la stessa cosa, uno utilizzando una serie di if, l altro utilizzando switch :

 if ($i == 0)

{

print "i è uguale a 0";

}

if ($i == 1)

{

print "i è uguale a 1";

}

if ($i == 2)

{

print "i è uguale a 2";

}

utilizzando il costrutto switch

switch ($i)

{ case 0: print "i è uguale a 0";

break;

case 1: print "i è uguale a 1";

break;

case 2: print "i è uguale a 2";

break;

}

 

È importante comprendere esattamente come viene eseguita la clausola switch per evitare errori.

Un istruzione switch esegue linea dopo linea le istruzioni in essa contenuta.

All'inizio non viene eseguito alcun codice.

Solamente quando incontra una clausola case il cui valore è uguale al valore della variabile, PHP inizia ad eseguire le istruzioni contenute nel blocco case. PHP continua l'esecuzione delle istruzioni fino alla termine del blocco switch, o quando incontra un istruzione break.

Se non esiste alcuna istruzione break al termine di un blocco case PHP continuerà l'esecuzione delle istruzioni del blocco case successivo.

Per esempio:

 switch ($i)

{ case 0: print "i è uguale a 0";

case 1: print "i è uguale a 1";

case 2: print "i è uguale a 2";

}

 

In questo caso se $i è uguale a 0, PHP eseguirà tutte le istruzioni contenute nei blocchi case.

Se $i è uguale a 1, PHP eseguirà le istruzioni degli ultimi due blocchi case e solamente se $i è uguale a 2 otterremo il risultato voluto e si visualizzerà solo $i è uguale a 2 .

Pertanto è importante non dimenticare l'istruzione break (anche se in alcuni casi potrà essere necessario non utilizzarla). In un istruzione switch, la condizione in parentesi viene valutata una sola volta e il risultato viene confrontato con ciascun ramo case.

Utilizzando elseif, la condizione viene valutata una seconda volta.

Se tale condizione è più complessa di un semplice confronto e/o è in un ciclo piuttosto pesante, l'uso di switch dovrebbe garantire un minor tempo di esecuzione.

Un blocco case può anche non contenere istruzioni, nel qual caso il controllo passa semplicemente al successivo blocco case.

switch ($i)

{ case 0:

case 1:

case 2: print "i è minore di 3 ma non negativo";

break;

case 3: print "i è 3";

}

 

Un blocco case speciale è il il blocco case di default.

Uguaglia tutte le condizioni non uguagliate nei blocchi case precedenti e deve essere l'ultimo blocco case.

Per esempio:

  switch ($i)

{ case 0: print "i è uguale a 0";

break;

case 1: print "i è uguale a 1";

break;

case 2: print "i è uguale a 2";

break;

default: print "i è diverso da 0, 1 o 2";

}

 

L'espressione in un ramo case può essere qualsiasi espressione il cui valore sarà di tipo intero, decimale, numerico e stringa. Array e oggetti (objects) non sono ammessi a meno che non siano de referenziati a un tipo di dato semplice tra quelli precedentemente elencati.

Come per altre strutture di controllo è possibile utilizzare una sintassi alternativa.

switch ($i):

case 0: print "i è uguale a 0";

break;

case 1: print "i è uguale a 1";

break;

case 2: print "i è uguale a 2";

  break;

default: print "i è diverso da 0, 1 o 2";

endswitch;

 

 

Exit e die

Quando è necessario interrompere l'esecuzione di uno script PHP, ad esempio per il verificarsi di una situazione di errore, si possono utilizzare i costrutti exit() e die().

Entrambi i costrutti producono l'effetto di arrestare l'esecuzione dello script, con un unica differenza: die() consente di visualizzare un messaggio, passato come argomento, prima di uscire.

Esempio:

if ($non_trovato)

{die (“utente non trovato. Non posso continuare”);

}