Controllo del flusso

Indice

Ogni linguaggio di programmazione necessita di strumenti per il controllo del flusso che consentano di realizzare un’evoluzione dello stato coerente con il verificarsi di determinate condizioni oppure l’esecuzione di determinate operazioni iterativamente, sfruttando le capacità di calcolo di un elaboratore. In questa lezione analizzerai le strutture di controllo condizionali, che ti permetteranno di far compiere delle azioni al programma nel caso si verifichino (o non si verifichino) determinate condizioni.

Costrutti condizionali
Le strutture di controllo che ci permettono di scegliere se eseguire o meno frammenti di codice in funzione di alcune condizioni prendono il nome di condizioni.
l'istruzione if
La più utilizzata delle strutture di controllo condizionali è senz’altro l’istruzione if, la cui sintassi più semplice è la seguente:
if ( $anni >= 18)
print "complimenti! Sei maggiorenne";        
Come possiamo notare è composta da una parola chiave if, da un’espressione contenuta fra parentesi tonde e da un’istruzione.

L’espressione contenuta fra parentesi tonde verrà valutata in senso booleano, quindi il suo risultato sarà considerato o vero o falso.
Nel primo caso (vero), verrà eseguita l'istruzione:

print "complimenti! Sei maggiorenne"; 
// altrimenti (falso), l'istruzione verrà saltata.       
Nulla toglie che le istruzioni possano essere più d’una, in questo caso la sintassi del costrutto cambia nella forma più generica:
if (condizione) { 
//porzione di codice da eseguire se la condizione è vera
 }        
Nel codice seguente è visualizzato un esempio. La condizione “if” e il blocco di istruzioni non devono avere il punto e virgola.
if ($anni >= 18 ) { 
print "complimenti! Sei maggiorenne";
 }        
L’istruzione “if” ci permette di definire parti di codice che saranno eseguite solo se una certa espressione assume il risultato booleano TRUE; è altresì possibile definire porzioni di codice che saranno eseguite nel caso in cui la condizione contenuta nell’espressione assuma il valore FALSE (condizione if-else)
eccone la sintassi:
if (condizione ) { 
//codice da eseguire se la condizione è vera
} else {
//codice da eseguire se la condizione è falsa
}       
Se il risultato della condizione è TRUE allora verrà eseguito il pezzo di codice che sta sotto l’istruzione “if”, altrimenti verrà eseguito il pezzo di codice che sta sotto l’istruzione “else”.

Una potenza di controllo maggiore sulle istruzioni ci viene data dal costrutto if-elseif-else, che può essere ripetuto più volte all’interno del costrutto e la cui sintassi è:

if (condizione_a) {
  //codice da eseguire se condizione_a è vera
}
elseif (condizione_b) {
  //codice da eseguire se condizione_a è falsa e condizione_b è vera
}
elseif (condizione_c) {
  //codice da eseguire se condizione_a è falsa, condizione_b è falsa e condizione_c è vera
}
else {
  //codice da eseguire se tutte le precedenti condizioni sono false
}         
La condizione switch
La condizione switch viene utilizzata al posto del costrutto “if-elseif-else” quando bisogna effettuare controlli multipli su singole espressioni.
la sua sintassi generica è:
switch (espressione) {
  case "primo_valore":
  // codice da eseguire se (espressione = = primo_valore)
  break;
  
  case "secondo_valore":
  // codice da eseguire se (espressione = = secondo_valore)
  break;
  
  case "terzo_valore":
  case "quarto_valore":
  // codice da eseguire se (espressione = = terzo_valore) oppure se (espressione = = quarto_valore)
  break;
  
  default:
  // codice da eseguire se tutte le altre condizioni non sono verificate
}        
Costrutti iterativi
I costrutti iterativi sono un altro fondamentale strumento per un qualsiasi linguaggio di programmazione, in quanto permettono di eseguire ciclicamente pezzi di codice in funzione di alcune condizioni.
Capita spesso, infatti, di dover elaborare grosse quantità di dati e che si debba prevedere il trattamento di gruppi di essi per poi ripeterlo ciclicamente su tutti i dati presenti.
In PHP esistono numerosi costrutti che ci permettono di eseguire operazioni cicliche sul codice.
ciclo for
Il ciclofor” è senz’altro uno dei costrutti comuni a molti linguaggi e consente di eseguire un certo numero noto a priori di iterazioni.
la sintassi è la seguente:
for (inizio_ciclo; condizione; azione) {
  // codice da eseguire quando la condizione è vera
}        
Il ciclo così definito viene eseguito seguendo quest’ordine:

  • “inizio_ciclo”, contenente di solito inizializzazione di oggetti;
  • valutazione della “condizione”: se questa è vera si passa al punto 3, altrimenti viene saltato tutto il codice contenuto fra parentesi graffe e si esce dal ciclo;
  • esecuzione di “azione”, contenente di solito un’operazione di incremento dell’oggetto inizializzato, e contemporaneamente esecuzione del codice racchiuso fra parentesi graffe.

Quindi il ciclo viene rieseguito partendo dalla valutazione della “condizione”.

Nel seguente codice è visualizzato un esempio pratico del ciclo “for” che genera come output la tabellina del 9 in questa forma:

<!DOCTYPE html>
<html lang="it">
  <head>
    <title>Ciclo for in PHP<title>
    <meta charset="utf-8">
  </head>
  <body>
    <p>
<?php
for($a = 1; $a <= 10; $a++) {
  $ris = 9 * $a;
  print(" 9 * $a = $ris <br />");
}
?>
    </p>
  </body>
</html>
Risultato
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
9 *10 = 90
while
Il ciclo while” è un costrutto con una sintassi molto semplice e compatta, che ci permette comunque di operare controlli di codice molto efficaci.
La sintassi generica è la seguente:
while (condizione) {
  // codice da eseguire per ogni ciclo
  // eventuale codice di modifica della condizione
}        
Il costrutto “while” ha un comportamento molto simile al costrutto “for”, infatti anche in questo caso, se la condizione restituisce un valore FALSE, allora non viene eseguita nessuna ripetizione e il pezzo di codice contenuto fra parentesi graffe viene saltato.
All’interno del ciclo dovrà esistere una qualche istruzione in grado di modificare il valore della condizione, altrimenti potrebbe crearsi una iterazione infinita.

Nel codice seguente si può notare come il precedente script per realizzare l’output della tabellina del 9 viene implementato mediante l’uso del “while“.

<!DOCTYPE html>
<html lang="it">
  <head>
    <title>Ciclo while in PHP<title>
    <meta charset="utf-8">
  </head>
  <body>
    <p>
<?php
$a = 1;
while ($a <= 10) {
  $ris = 9 * $a;
  print(" 9 * $a = $ris <br />");
  $a++;
}
?>
    </p>
  </body>
</html>                        
do-while
Sia per il costrutto “for” che per il costrutto “while” vale la regola secondo la quale, se la condizione è inizialmente falsa, allora il codice racchiuso fra parentesi graffe viene saltato e il ciclo finisce.

Il costrutto do-while“, invece, ci permette di eseguire il codice racchiuso fra parentesi graffe almeno una volta prima che si esca dal ciclo.
Questa è la sua sintassi generica:

do {
  // codice da eseguire per ogni ciclo
} while (condizione);        
Se osserviamo lo script riportato nel codice seguente possiamo notare che, nonostante la condizione risulti falsa fin dall’inizio, se proviamo a eseguire il codice, il blocco delle istruzioni che stanno fra parentesi graffe viene eseguito almeno una volta, e quindi lo script stamperà il numero 10.
<!DOCTYPE html>
<html lang="it">
  <head>
    <title>Ciclo do-while in PHP<title>
    <meta charset="utf-8">
  </head>
  <body>
    <p>
<?php
$a = 10;
do {
  print($a++ . "<br />");
} while ($a < 10)
?>
    </p>
  </body>
</html>                        
ciclo foreach
Esiste una particolare struttura di controllo costruita appositamente per trattare gli array; si tratta del ciclo “foreach
la cui sintassi generica è:
foreach ($array as $chiave => $valore) {
  // codice da eseguire per ogni elemento dell'array
}        
All’interno delle parentesi graffe possiamo scrivere istruzioni che fanno riferimento all’indice e al contenuto dell’elemento che stiamo trattando.

Nel caso ci interessi solo il valore e non la chiave possiamo utilizzare il costrutto in questa forma:

foreach ($array as $valore) {
  // codice da eseguire per ogni elemento dell'array
}        
Similari
[content_box]Python per tutti
698% Python
Python para todos è un libro sulla programmazione in Python. Questo è un tutoriale su Python adatto a tutti i livelli e si può scaricare in pdf gratuitamente in spagnolo. Il tutoriale di Python…[/content_box] [content_box]Fondamentali di jQuery
165% JQuery
jQuery stà diventando rapidamente uno strumento che ogni sviluppatore web di interfacce dovrebbe conoscere. Lo scopo di questo libro è di fornire una panoramica della biblioteca, in modo che qu…[/content_box] [content_box]Guida allo Zend Framework
32% Zend
Zend Framework è un framework open source per PHP. Zend Framework separa la logica e le azioni usando il pattern MVC (Model View Controller). Cosa è lo Zend Framework? Framework per la costruzione di siti web più veloci e …[/content_box] [content_box]Funzioni popolari per gestire le stringhe
31% Php
PHP ha una vasta scelta di funzioni integrate per la gestione delle stringhe che permettono di manipolarle facilmente in quasi ogni modo possibile. Tuttavia, imparare tutte queste funzioni, ricordando quello che fanno e qu…[/content_box] [content_box]Frammenti utili in PHP
25% Php
Se i frammenti di tipo PHP abbondano su Internet, allora perché scriverne un altro? Beh, i frammenti PHP trovati al giro sono generalmente zoppi. Frammenti che generano una stringa casuale o un ritorno di $_SERVER[“REMOTE_…[/content_box]