Giunto a questo punto sarai sicuramente già molto entusiasta delle nozioni imparate, e non vedrai l’ora di fare sul serio!
Che ne dici? Proseguiamo?
Vediamo, in questa guida, che cosa sono le cosiddette strutture di controllo: sequenza, selezione e iterazione.
A venire in nostro aiuto per introdurle, è il famosissimo Teorema di Böhm-Jacopini (Corrado Böhm e Giuseppe Jacopini).
Il Teorema di Böhm-Jacopini, infatti, afferma che qualunque algoritmo può essere implementato in fase di programmazione utilizzando tre sole strutture, dette strutture di controllo:
- la sequenza
- la selezione
- l’ iterazione (o ciclo)
da applicare ricorsivamente alla composizione di istruzioni elementari.
Analizziamo, ora, le strutture di controllo una per volta.
SEQUENZA IN PHP
Abbiamo, nel nostro codice, questa situazione:
<?php $num1=2; $num2=5; echo $num1+$num2; ?>
Da cui risulterá:
La sequenza parte dall’alto verso il basso ed esegue gli statement (istruzioni) uno alla volta.
In pratica:
- il primo step assegna il valore 2 alla variabile $num1
- il secondo step assegna il valore 5 alla variabile $num2
- il terzo step vede il comando echo e mostra la somma delle due variabili
Come puoi notare dalla descrizione appena fatta, tutto avviene in sequenza, dall’alto verso il basso.
SELEZIONE (condizione) IN PHP
Nella selezione, al verificarsi di una condizione (interna ad un’istruzione) verranno eseguite delle righe di codice.
Le istruzioni possono essere:
- if
- else
- elseif
- switch
IF PHP
Quando incontra l’istruzione IF, il programma esegue il codice presente all’interno del suo corpo solo se la condizione è verificata.
<?php $is_student = true; if($is_student == true){ echo "Si sei uno studente!"; } ?>
Da cui risulterá:
Per sequenza verrá assegnato il valore true alla variabile $is_student, successivamente verrá incontrata l’istruzione if con la condizione al suo interno vera, e, quindi, il codice verrá eseguito.
Vediamo lo stesso esempio scritto, però, in modo un pochino diverso:
<?php $is_student = true; if($is_student){ echo "Si sei uno studente!"; } ?>
Ne risulterá ugualmente:
Ti chiedi il perché? Questo avviene perché la variabile $is_student é un valore truthy, quindi possiamo omettere il controllo che sia == true.
PHP IF/ELSE
Con questo tipo di istruzioni Il programma eseguirà il codice nel corpo dell’if solo se la condizione nelle parentesi è verificata. Altrimenti, eseguirá il codice presente nel corpo dell’else.
<?php $is_student = true; if($is_student == true){ echo "Si sei uno studente!"; }else{ echo "Non sei uno studente!"; } ?>
Da cui risulterá:
Per sequenza, verrà assegnato il valore false alla variabile $is_student, poi verrà incontrata l’istruzione if con la condizione al suo interno che però risulterà falsa (quindi un dato falsy). Dunque, non verrá eseguito il codice all’interno del corpo del’if ma il codice presente nel corpo dell’else.
PHP IF/ELSEIF/ELSE
Analogamente a quanto sopra, con queste istruzioni il programma esegue il codice nel corpo dell’if solo se la condizione truthy all’interno delle parentesi é verificata.
Se non è così, va ad analizzare la condizione nelle parentesi dell’ elseif; se questa è verificata la eseguirà, altrimenti eseguirá il codice presente nel corpo dell’else.
<?php $color = 'red'; if($color == 'red'){ echo "Il colore é rosso!"; }elseif($color == 'blue'){ echo "Il colore é blue!"; }else{ echo "Il colore non é ne rosso ne blu!"; } ?>
Da cui risulterá:
Per sequenza verrà assegnato il valore ‘red’ alla variabile $color, dopodichè verrà incontrata l’istruzione if con la condizione al suo interno che é vera, quindi truthy. Quindi, grazie al php echo, il programma stamperá in console che il colore è rosso.
Se il controllo nel primo if fosse stato falsy la sequenza sarebbe andata avanti incontrando la successiva istruzione dell’ elsif e, quindi, controllando se la condizione fosse verificata, in caso di truthy avrebbe stampato a terminale “il colore è blu”. Se nessuna delle due condizioni nell’if e nell’else-if si fosse verificata sarebbe stato eseguito l’ultimo php echo che ci avrebbe stampato a terminale “il colore non è ne rosso ne blue.” Semplicissimo, vero?
PHP SWITCH
E se il numero degli elseif aumentasse? Niente paura! Per fortuna, non dovremmo scriverli tutti creando, così, codice poco chiaro e non leggibile: useremmo, invece, lo switch case.
Lo switch non fa altro che valutare il valore di una variabile e scegliere un percorso da seguire tenendo conto di quest’ultimo. Se non troverà una corrispondenza, seguirà un percorso definito di default (predefinito).
Possiamo immaginare il comportamento dello switch come se fosse una stanza con tre porte colorate. Una gialla, una verde ed una blu. All’entrata ci consegnano un bigliettino corrispondente ad uno di questi tre colori e noi, quindi, possiamo aprire solo quella con il colore corrispondente. Il bigliettino è la variabile da valutare, mentre le porte sono le parti di codice da eseguire.
Vediamo un esempio:
<?php $color="yellow"; //Nelle parentesi tonde mettiamo la variabile che vogliamo valutare switch($color){ case $color == "green": echo "Sei entrato nella porta verde!"; break; case $color == "blue": echo "Sei entrato nella porta blu!"; break; case $color == "yellow": echo "Sei entrato nella porta gialla!"; break; default: // gestisce tutte le altre casistiche che non ho pensato echo "Non ci sono porte del colore scelto!"; break; } //Output //Sei entrato nella porta gialla! ?>
Come notiamo dall’esempio, tutti i “case” ed il default sostituiscono tutti gli if/else/elseif. Il break blocca il codice, che – ricordiamoci – segue una sequenza di esecuzione dall’alto verso il basso, ed il default verrà eseguito se $color non corrisponde a nessuno dei valori elencati nei case.
ITERAZIONE IN PHP
Le iterazioni ( o cicli ) sono blocchi di codice che si ripetono finché una determinata condizione da truthy non diventa falsy, ma anche per ogni elemento di una struttura dati complessa ( sempre, peró, finché la condizione risulti essere vera (truthy).
I cicli sono:
- for
- foreach
- while
- do-while
Analizziamoli uno per volta.
Ciclo FOR PHP
Un ciclo for ripete il codice racchiuso all’interno del suo corpo finché una particolare condizione non diventerá falsa (falsy). Questa condizione sará proprio un controllo sul numero di volte in cui avrá effettuato il ciclo.
É costituito da:
- un punto d’entrata della logica del ciclo che corrisponderá ad un indice inizializzato a 0 (ovviamente a seconda dell’utilizzo puó avere anche valori diversi da zero)
- la condizione di controllo del numero di cicli effettuati
- l’incremento/decremento dell’indice
Vediamo un esempio di ciclo for:
<?php for ($i=0; $i < 5; $i++) { echo $i."\n"; } ?>
Da cui risulterá:
Come puoi notare, questo ciclo non fará altro che mostrarci tutti i numeri da 0 a 4, poiché, nell’ultimo ciclo, effettuerá un controllo sulla condizione con l’indice pari a 5: tuttavia, 5 non é minore di 5 e, quindi, il nostro ciclo si fermerá mostrandoci il valore di $i pari a 4.
Ciclo FOREACH PHP
Un ciclo foreach viene utilizzato per selezionare e manipolare tutti gli elementi di un array ma anche di una collection (collezione di dati).
E’ composto da due parti principali:
- L’array o la collection da ciclare
- una variabile d’appoggio (immaginala come un contenitore all’interno del quale verrá inserito il dato appena preso dalla struttura dati)
La differenza fondamentale fra un ciclo for e un foreach è che il ciclo si fermerà quando tutta la struttura dati sarà finita. Non possiamo controllare i cicli, come, invece, abbiamo fatto con la condizione del ciclo for.
<?php $elements=['ciao','sono','il','dato']; foreach ($elements as $element) { echo $element."\n"; } ?>
Da cui risulterá:
Come vediamo, il programma ci stamperá in output ogni singolo dato dell’array. Possiamo utilizzare il php echo, in questo caso, perché ogni singolo dato è un dato semplice. Se stessimo, invece, catturando dati complessi dall’array avremmo dovuto utilizzare la php print_r().
Ciclo WHILE PHP
Un ciclo while esegue la porzione di codice al suo interno solo e soltanto se alla prima valutazione della sua condizione, questa sarà truthy. Tutte le successive esecuzioni del codice avverranno solo e soltanto se la condizione risulterà ancora truthy.
<?php $num=0; while($num < 5){ echo $num."\n"; $num++; } ?>
Da cui risulterá:
Osserva: eseguendo il codice dall’alto verso il basso (sequenza) cosa succede? Il programma inizializza una variabile chiamata $num a zero, incontra la dichiarazione del ciclo while e ne valuta la condizione. Effettivamente, 0 é minore di 5 e quindi la sua condizione sarà truthy; di conseguenza, entrerá nel corpo del ciclo while ed eseguirá il php echo, mostrandoci il valore di $num che risulterá essere 0.
Incontrerá, poi, lo statement di incremento della variabile $num, per poi tornare a controllare la condizione. Ora $num é 1; 1 è minore di 5 quindi la sua condizione sarà ancora truthy e la porzione di codice si ripeterá finché $num non diventerá 5, che non sarà minore di 5 quindi il ciclo si fermerá.
Ciclo DO-WHILE PHP
Il ciclo do-while, a differenza del ciclo while, esegue la porzione di codice al suo interno almeno una volta e senza valutare la condizione prima di poter eseguire il codice al suo interno. Per le successive esecuzioni del codice verrá valutata la condizione che dovrá essere truthy e ripeterá il codice all’interno del corpo del do.
<?php $num=0; do{ echo $num."\n"; $num++; }while($num < 5); ?>
Da cui risulterá:
Come sopra: eseguendo il codice dall’alto verso il basso (sequenza) vediamo cosa succede. Il programma inizializza una variabile chiamata $num a zero, incontra la dichiarazione del ciclo do-while ed entra nel corpo del do eseguendo il codice.
Esegue, quindi, il php echo, mostrandoci il valore di $num (0 in questo passaggio); incontra, poi, l’incremento della variabile e aggiunge 1 a $num. Adesso valuta la condizione, 1 è effettivamente minore di 5 quindi la condizione sarà verificata e la porzione di codice si ripeterá finché $num non diventerà 5. Infine verifica che 5 non é minore di 5 e, quindi, blocca il ciclo.