PHP » Controllo flusso

 
 

Come abbiamo già visto per la struttura sintattica di base, il PHP ha in comune con il C e il Perl anche le principali strutture di controllo del flusso dei programmi.  Di seguito vedremo le principali strutture di controllo disponibili ed alcuni esempi pratici di utilizzo.

Operatori condizionali

Innanzi tutto vediamo con quali operatori avremo a che fare per verificare le condizioni in base alle quali decideremo il da farsi.  Lo schema che segue elenca i più comuni operatori condizionali che potremo utilizzare.

OperatoreRisultato del confronto
x == y VERO se il valore di x è uguale al valore di y
x != y VERO se il valore di x è diverso dal valore di y
x < y VERO se il valore di x è minore del valore di y
x > y VERO se il valore di x è maggiore del valore di y
x <= y VERO se x è minore o uguale a y
x >= y VERO se x è maggiore o uguale a y
(a) && (b) VERO se le espressioni a e b sono vere entrambe;
FALSO negli altri casi
(a) || (b) FALSO solo se entrambe le espressioni sono false;
VERO se almeno una è vera

Proviamo a vedere con alcuni esempi il funzionamento degli operatori elencati con alcuni semplici confronti:

 $x = 10;   $y = 90;   $z = 20;

 (($x == $y) && ($x <= $z))
 ((10 == 90) && (10 <= 20))
    falso    &&    VERO     ->    falso

 (($x + $y) == ($z * 5))
 ((10 + 90) == (20 * 5))
     100    ==   100        ->    VERO

 (($x != $y) || ($x == $z))
 ((10 != 90) || (10 == 20))
     vero    ||    falso    ->    VERO
 

Assicuratevi sempre di non confondere l'operatore di assegnazione (=) con l'operatore di confronto (==).  Questa è una delle più frequenti cause di grande confusione per tanti neofiti, almeno fino a quando non acquistano maggiore dimestichezza con tali operatori.

Esecuzione condizionale

if ( )  ...  elseif ( )  ...  else

La if è la struttura di base di ogni linguaggio e permette di eseguire del codice o visualizzare porzioni di pagina se una determinata condizione viene a verificarsi.
C'è anche la possibilità di specificare un blocco di codice alternativo nel caso in cui la condizione risulti falsa.

 if ($numero > 10) {
     echo 'Il numero è maggiore di 10.';
 } elseif ($numero == 10) {
     echo 'Il numero è uguale a 10.';
 } else {
     echo 'Il numero è minore di 10.';
 }
 

switch ()  ...  case  ...  default

Quando la verifica deve essere eseguita su più valori, ai quali ci aspettiamo di dover rispondere con azioni diverse, è più conveniente ricorrere al costrutto switch.   Il vantaggio principale consiste in una migliore leggibilità del codice che si traduce anche in una minore possibilià di compiere errori di digitazione.

 switch ($scelta) {
     case 1:   echo 'Scelta numero uno';
               break;
     case 2:   echo 'Scelta numero due';
               break;
     case 3:   echo 'Scelta numero tre';
               break;
     default:  echo 'Scelta predefinita';
 }
 

Non scordatevi mai dei break alla fine del blocco di codice!   In mancanza dell'istruzione break l'esecuzione prosegue all'interno del blocco successivo indipendentemente dal fatto che la condizione di uguaglianza dei valori sia soddisfatta o meno.   Ciò che importa è la presenza del break al termine del blocco.

 

Cicli di ripetizione

while ( )

Il ciclo while è la forma di ciclo più semplice tra quelle possibili in PHP.   La forma di base di un ciclo while è la seguente:

 while (espressione) {
     blocco di codice
 }
 

Il funzionamento è molto semplice.  L'interprete PHP esegue le istruzioni in esso racchiuse fintanto che l'espressione contenuta tra le parentesi è vera.  Il valore dell'espressione viene verificato ogni volta che il ciclo si ripete, così che anche se il valore dell'espressione cambia durante l'esecuzione, il ciclo non termina fino al successivo confronto.
Se l'espressione è falsa già all'inizio, il blocco di codice non verrà eseguito mai.

Vediamo due esempi per visualizzare i numeri da 1 a 10 :

 $i = 1;
 while ($i <= 10) {
     echo $i++; # Il valore stampato è quello prima
                # dell'incremento (post-incremento)
 }
 

Sintassi alternativa:

 $i = 1;
 while ($i <= 10):
     echo $i;
     $i++;
 endwhile;
 

do  ...  while ( )

Il ciclo do while è simile al ciclo while, con l'unica differenza che l'espressione viene valutata alla fine di ogni ciclo anzichè all'inizio.   La conseguenza evidente è che il blocco di verrà sempre eseguito almeno una volta, anche se l'espressione da come risultato un false.

Vediamo come potrebbe essere riscritto il ciclo precedente con do while:

 $i = 1;
 do {
     echo $i++;
 } while ($i < 10);
 

for ( )

Il ciclo for è il ciclo più complesso tra quelli disponibili in PHP.   La sintassi di un ciclo for è riassumibile nel seguente riquadro:

 for (inizializzazione; verifica; incremento) {
     blocco di codice
 }
 

Vediamone ora il funzionamento:  la prima espressione (che abbiamo chiamato inizializzazione) viene eseguita una sola volta all'inizio del ciclo.  Ad ogni iterazione, è valutato il risultato dell'espressione "verifica".  Se il risultato è vero il ciclo prosegue e viene eseguito il blocco di codice, altrimenti il ciclo ha termine.  Dopo ciascun ciclo, viene eseguita l'istruzione di incremento.

Non finisce qui: le espressioni sono facoltative.  Se non esiste l'espressione verifica il ciclo sarà eseguito all'infinito (il risultato come nel C, sarà assunto come vero).  In questo caso a terminare il ciclo sarà l'istruzione break posta all'interno del ciclo for.

Negli esempi seguenti visualizzeremo i numeri da 1 a 10 come in precedenza.

 for ($i = 1; $i <= 10; $i++) {
     echo $i;
 }


 # uso di break per uscire dal ciclo
 for ($i = 1; ; $i++) {
     if ($i > 10) {
         break;
     }
     echo $i;
 }


 # tutto in una riga, niente blocco di codice!
 for ($i = 1; $i <= 10; echo $i, $i++);