PHP: Parte 3 - IF, Switch e Loop
                    Strutture di Controllo del Flusso in PHP: Far Decidere al Tuo Codice
Benvenuti al terzo appuntamento con la nostra guida completa a PHP! Nei post precedenti abbiamo introdotto PHP, configurato il nostro ambiente di sviluppo e imparato a gestire i dati con variabili e costanti. Ora è il momento di un concetto fondamentale che darà vita e "intelligenza" ai tuoi script: le strutture di controllo del flusso.
Immagina di voler che il tuo programma faccia qualcosa solo se una certa condizione è vera, o che ripeta un'azione più volte. Le strutture di controllo del flusso sono gli strumenti che ti permettono di fare proprio questo, guidando l'esecuzione del codice in base a logiche specifiche.
1. Condizioni: IF, ELSEIF, ELSE – Prendere Decisioni
Le istruzioni condizionali ti permettono di eseguire blocchi di codice diversi a seconda che una o più condizioni siano vere o false.
IF Statement
L'istruzione if è la più semplice. Esegue un blocco di codice solo se la condizione specificata è vera.
Sintassi:
if (condizione) {
    // Codice da eseguire se la condizione è VERA
}
Esempio:
<?php
$eta = 20;
if ($eta >= 18) {
    echo "Sei maggiorenne.";
}
?>
IF...ELSE Statement
L'istruzione if...else ti permette di specificare un blocco di codice da eseguire se la condizione è vera e un altro blocco da eseguire se la condizione è falsa.
Sintassi:
if (condizione) {
    // Codice da eseguire se la condizione è VERA
} else {
    // Codice da eseguire se la condizione è FALSA
}
Esempio:
<?php
$ora = date("H"); // Ottiene l'ora corrente (formato 24 ore)
if ($ora < 12) {
    echo "Buongiornissimo!";
} else {
    echo "Buonasera!";
}
?>
IF...ELSEIF...ELSE Statement
Quando hai più di due possibili risultati, puoi usare l'istruzione if...elseif...else. PHP valuterà le condizioni in ordine e eseguirà il primo blocco per cui la condizione risulta vera. Se nessuna condizione è vera, verrà eseguito il blocco else (se presente).
Sintassi:
if (condizione1) {
    // Codice se condizione1 è VERA
} elseif (condizione2) {
    // Codice se condizione2 è VERA
} elseif (condizione3) {
    // Codice se condizione3 è VERA
} else {
    // Codice se NESSUNA delle condizioni precedenti è VERA
}
Esempio:
<?php
$punteggio = 75;
if ($punteggio >= 90) {
    echo "Voto: A (Eccellente)";
} elseif ($punteggio >= 80) {
    echo "Voto: B (Molto buono)";
} elseif ($punteggio >= 70) {
    echo "Voto: C (Buono)";
} elseif ($punteggio >= 60) {
    echo "Voto: D (Sufficiente)";
} else {
    echo "Voto: F (Insufficiente)";
}
?>
2. Switch Case: Alternative Multiple
L'istruzione switch è un'alternativa più pulita e leggibile all'if...elseif...else quando devi confrontare una singola variabile (o espressione) con molti valori diversi.
Sintassi:
switch (espressione) {
    case valore1:
        // Codice da eseguire se espressione == valore1
        break;
    case valore2:
        // Codice da eseguire se espressione == valore2
        break;
    default:
        // Codice da eseguire se nessun caso corrisponde
        break;
}
- 
case: Definisce un valore con cui confrontare l'espressione. - 
break;: È cruciale! Termina l'esecuzione del bloccoswitche impedisce il "fall-through" (cioè, l'esecuzione dei casi successivi anche se non corrispondono). - 
default:: (Opzionale) Il codice in questo blocco viene eseguito se nessuncasecorrisponde all'espressione. 
Esempio:
<?php
$colore = "rosso";
switch ($colore) {
    case "rosso":
        echo "Hai scelto il colore rosso.";
        break;
    case "blu":
        echo "Hai scelto il colore blu.";
        break;
    case "verde":
        echo "Hai scelto il colore verde.";
        break;
    default:
        echo "Colore non riconosciuto.";
        break;
}
?>
3. Cicli (Loop): Ripetere le Azioni
I cicli ti permettono di eseguire un blocco di codice ripetutamente, finché una condizione non diventa falsa o per un numero predefinito di volte.
For Loop
Il ciclo for è ideale quando sai esattamente quante volte vuoi che il ciclo venga eseguito.
Sintassi:
for (inizializzazione; condizione; incremento/decremento) {
    // Codice da eseguire ripetutamente
}
- 
inizializzazione: Eseguita una sola volta all'inizio del ciclo. - 
condizione: Valutata all'inizio di ogni iterazione. Se è vera, il ciclo continua; se è falsa, il ciclo termina. - 
incremento/decremento: Eseguito alla fine di ogni iterazione. 
Esempio:
<?php
for ($i = 0; $i < 5; $i++) {
    echo "Il numero è: " . $i . "<br>";
}
// Output:
// Il numero è: 0
// Il numero è: 1
// Il numero è: 2
// Il numero è: 3
// Il numero è: 4
?>
While Loop
Il ciclo while esegue un blocco di codice finché la condizione specificata rimane vera. È utile quando non sai in anticipo quante iterazioni saranno necessarie.
Sintassi:
while (condizione) {
    // Codice da eseguire ripetutamente
}
Importante: Assicurati che la condizione diventi falsa ad un certo punto, altrimenti avrai un "loop infinito"!
Esempio:
<?php
$i = 1;
while ($i <= 5) {
    echo "Il numero è: " . $i . "<br>";
    $i++; // Incrementa $i per evitare un loop infinito
}
// Output uguale all'esempio for loop
?>
Do-While Loop
Il ciclo do-while è simile al while, ma garantisce che il blocco di codice venga eseguito almeno una volta, perché la condizione viene valutata alla fine di ogni iterazione.
Sintassi:
do {
    // Codice da eseguire almeno una volta
} while (condizione);
Esempio:
<?php
$i = 6; // Inizializzo $i a un valore che renderebbe falsa la condizione del while
do {
    echo "Questo messaggio verrà stampato almeno una volta. Numero: " . $i . "<br>";
    $i++;
} while ($i <= 5); // La condizione è falsa, quindi il ciclo si ferma dopo la prima esecuzione
// Output:
// Questo messaggio verrà stampato almeno una volta. Numero: 6
?>
Foreach Loop
Il ciclo foreach è specificamente progettato per iterare su array e oggetti, rendendo molto semplice l'accesso a ogni elemento. Ne parleremo più approfonditamente nel post dedicato agli array.
Sintassi (per array):
foreach ($array as $valore) {
    // Codice da eseguire per ogni $valore nell'array
}
// O con chiave e valore:
foreach ($array as $chiave => $valore) {
    // Codice da eseguire per ogni $chiave e $valore nell'array
}
Esempio:
<?php
$frutti = ["mela", "banana", "ciliegia"];
foreach ($frutti as $frutto) {
    echo "Mi piace la " . $frutto . "<br>";
}
// Output:
// Mi piace la mela
// Mi piace la banana
// Mi piace la ciliegia
?>
4. Break e Continue: Controllo Avanzato dei Cicli
- 
break: Termina immediatamente l'esecuzione del ciclo corrente e il controllo del programma passa all'istruzione successiva al ciclo. - 
continue: Salta l'iterazione corrente del ciclo e passa immediatamente all'iterazione successiva. 
Esempio con break:
<?php
for ($i = 0; $i < 10; $i++) {
    if ($i == 5) {
        echo "Ho raggiunto il 5, esco dal ciclo!<br>";
        break; // Il ciclo si ferma qui
    }
    echo "Il numero è: " . $i . "<br>";
}
// Output: 0, 1, 2, 3, 4, Ho raggiunto il 5, esco dal ciclo!
?>
Esempio con continue:
<?php
for ($i = 0; $i < 5; $i++) {
    if ($i == 2) {
        echo "Salto il numero 2!<br>";
        continue; // Salta il resto del codice in questa iterazione e passa alla successiva
    }
    echo "Il numero è: " . $i . "<br>";
}
// Output: 0, 1, Salto il numero 2!, 3, 4
?>
In Sintesi
Le strutture di controllo del flusso sono essenziali per creare programmi dinamici e reattivi. Con if/else, switch e i vari tipi di loop (for, while, do-while, foreach), hai gli strumenti per far sì che il tuo codice prenda decisioni e ripeta azioni in modo efficiente.
Pratica questi concetti, sono la spina dorsale di qualsiasi logica di programmazione!
Prossimi Passi
Ora che il tuo codice può "pensare" e "ripetere", nel prossimo post esploreremo le funzioni in PHP. Imparerai a organizzare il tuo codice in blocchi riutilizzabili, rendendolo più modulare, leggibile e facile da mantenere.
Non mancare al prossimo capitolo!