Introduzione alle Strutture Condizionali
Benvenuti alla settima lezione del nostro corso "Impara PHP in 50 lezioni". Fino a questo momento abbiamo imparato a dichiarare variabili, a manipolare stringhe e a eseguire calcoli matematici. Tuttavia, un programma che esegue semplicemente una lista di istruzioni dall'alto verso il basso è molto limitato.
Nella programmazione reale, le applicazioni devono "prendere decisioni". Ad esempio: un utente è loggato? Se sì, mostra il profilo; altrimenti, mostra il pulsante di login. Il carrello è vuoto? Se sì, avvisa l'utente; altrimenti, procedi al pagamento. Questa capacità di deviare l'esecuzione del codice in base a determinate condizioni è ciò che rende il software dinamico e intelligente. In PHP, questo viene gestito attraverso le strutture condizionali.
In questa lezione esploreremo i tre strumenti principali per gestire il flusso logico: l'istruzione if, l'estensione else (con elseif) e l'alternativa più strutturata chiamata switch.
L'Istruzione if: La Base del Decision Making
L'istruzione if (che in inglese significa "se") è la struttura condizionale più comune. Il suo funzionamento è intuitivo: se una determinata condizione è vera (TRUE), il codice all'interno del blocco viene eseguito. Se la condizione è falsa (FALSE), il codice viene ignorato.
Come funziona la sintassi
La sintassi di base è composta dalla parola chiave if, seguita da una condizione racchiusa tra parentesi tonde () e un blocco di codice racchiuso tra parentesi graffe {}.
Ecco un esempio semplice:
<?php
$eta = 20;
if ($eta >= 18) {
echo "Hai l'età legale per votare!";
}
?>
Nel codice sopra, PHP valuta l'espressione $eta >= 18. Poiché 20 è maggiore o uguale a 18, l'espressione restituisce true e il messaggio viene stampato a video. Se avessimo impostato $eta = 15, l'istruzione echo non sarebbe mai stata eseguita.
Operatori di Confronto
Per usare l'istruzione if, dobbiamo saper scrivere condizioni. Le condizioni si basano sugli operatori di confronto, che restituiscono sempre un valore booleano (true o false):
==: Uguale a (confronta solo il valore).===: Identico a (confronta valore e tipo di dato).!=: Diverso da.<: Minore di.>: Maggiore di.<=: Minore o uguale a.>=: Maggiore o uguale a.
È fondamentale distinguere tra == e ===. Ad esempio, 5 == "5" è vero perché PHP converte la stringa in numero, ma 5 === "5" è falso perché uno è un intero e l'altro è una stringa. Per evitare bug imprevisti, è best practice usare sempre l'operatore di identità ===.
Gestire Alternative con else e elseif
Cosa succede se vogliamo che il programma faccia qualcosa di diverso quando la condizione if è falsa? Qui entrano in gioco else (altrimenti) e elseif (altrimenti se).
L'istruzione else
L'istruzione else agisce come un "paracadute". Viene eseguita solo se tutte le condizioni if precedenti sono risultate false.
<?php
$password_corretta = false;
if ($password_corretta) {
echo "Benvenuto nel tuo pannello di controllo!";
} else {
echo "Password errata. Riprova.";
}
?>
In questo caso, non c'è modo di "sfuggire": o viene eseguito il blocco if, o viene eseguito il blocco else. Questo è ideale per scenari binari (Sì/No, Vero/Falso).
L'istruzione elseif per condizioni multiple
Quando abbiamo più di due possibilità, l'uso di soli if ed else non è sufficiente. Possiamo inserire uno o più blocchi elseif tra l' if iniziale e l' else finale. PHP valuterà le condizioni in ordine: non appena ne trova una vera, esegue quel blocco e ignora tutto il resto della struttura.
<?php
$voto = 75;
if ($voto >= 90) {
echo "Eccellente!";
} elseif ($voto >= 70) {
echo "Buono";
} elseif ($voto >= 60) {
echo "Sufficiente";
} else {
echo "Insufficiente";
}
?>
Perché usare elseif invece di tanti if separati? Se usassimo solo if, PHP controllerebbe ogni singola condizione. In questo esempio, se il voto fosse 95, verrebbero stampati sia "Eccellente!" che "Buono" e "Sufficiente", perché tutte e tre le condizioni sarebbero vere. Usando elseif, ci assicuriamo che venga scelta una sola opzione.
La Struttura switch: L'Alternativa Elegante
Quando dobbiamo confrontare una singola variabile con molti valori diversi, scrivere una catena infinita di elseif diventa ripetitivo e difficile da leggere. In questi casi, PHP offre l'istruzione switch.
Lo switch prende una variabile e la confronta con diversi "casi" (case). Se trova una corrispondenza, esegue il codice associato.
Sintassi e l'importanza di break
<?php
$colore_preferito = "blu";
switch ($colore_preferito) {
case "rosso":
echo "Il rosso è un colore energico!";
break;
case "blu":
echo "Il blu è calmo e rilassante.";
break;
case "verde":
echo "Il verde rappresenta la natura.";
break;
default:
echo "Non conosco questo colore.";
}
?>
Analizziamo i componenti chiave dello switch:
case: Definisce il valore da confrontare. Se$colore_preferitoè uguale a "blu", viene eseguito il codice sottocase "blu".break: Questo comando è cruciale. Dice a PHP di "uscire" dallo switch una volta trovato il caso corretto. Se dimentichiamo ilbreak, PHP continuerà a eseguire tutti i casi successivi (comportamento chiamato fall-through), anche se i valori non corrispondono.default: Funziona esattamente come l'else. Viene eseguito se nessuno dei casi precedenti è risultato vero.
Esempi Pratici: Casi d'Uso Reali
Per capire come applicare queste conoscenze, vediamo due scenari tipici nello sviluppo web.
Caso 1: Gestione dei Permessi Utente
Immaginiamo di dover mostrare contenuti diversi in base al ruolo di un utente nel database.
<?php
$ruolo = "editor";
if ($ruolo === "admin") {
echo "Benvenuto Amministratore. Puoi gestire utenti e impostazioni.";
} elseif ($ruolo === "editor") {
echo "Benvenuto Editor. Puoi scrivere e modificare articoli.";
} elseif ($ruolo === "utente") {
echo "Benvenuto Utente. Puoi leggere gli articoli.";
} else {
echo "Accesso negato. Ruolo non riconosciuto.";
}
?>
Caso 2: Menu di Navigazione Dinamico
Supponiamo di avere una pagina index.php che carica contenuti diversi in base a un parametro passato nell'URL (es. index.php?pagina=contatti).
<?php
// Simuliamo il recupero di un parametro dall'URL
$pagina = "servizi";
switch ($pagina) {
case "home":
echo "<h1>Benvenuti nella Home Page</h1>";
break;
case "servizi":
echo "<h1>I Nostri Servizi</h1>";
echo "<p>Offriamo sviluppo web e SEO.</p>";
break;
case "contatti":
echo "<h1>Contattaci</h1>";
echo "<p>Scrivici a email@esempio.it</p>";
break;
default:
echo "<h1>Pagina non trovata (404)</h1>";
}
?>
Errori Comuni e FAQ
1. Confondere = con ==
Uno degli errori più frequenti per i principianti è usare l'operatore di assegnazione = invece di quello di confronto == o === all'interno di un if.
if ($x = 10) non controlla se x è 10, ma assegna 10 a x e restituisce true, rendendo la condizione sempre vera. Usa sempre == o === per i confronti.
2. Dimenticare il break nello switch
Se ometti il break, PHP eseguirà tutti i blocchi di codice successivi finché non incontra un break o la fine dello switch. Questo porta a output anomali e bug difficili da scovare.
3. Parentesi graffe mancanti
In PHP, se il blocco di codice dopo un if è composto da una sola riga, le parentesi graffe {} sono opzionali. Tuttavia, è fortemente consigliato usarle sempre. Perché? Perché se in futuro aggiungerai una seconda riga di codice al blocco if, quella riga verrà eseguita indipendentemente dalla condizione se non hai messo le graffe, creando errori logici.
Prossimi Passi
Ora che hai padronggiato le condizioni, hai acquisito il potere di creare logiche complesse. Ma cosa succede se dobbiamo ripetere un'azione per molte volte? Ad esempio, stampare una lista di 100 prodotti dal database?
Scrivere 100 volte echo sarebbe inefficiente. Nella prossima lezione esploreremo i Cicli (Loops): for, while e foreach. Imparerai come automatizzare i compiti ripetitivi e come iterare attraverso gli array, completando così il set di strumenti fondamentali per il controllo del flusso in PHP.
Esercizio consigliato: Prova a creare un piccolo script che simuli un calcolatore di sconti: se l'importo dell'acquisto è superiore a 100€, applica uno sconto del 10%, se è superiore a 200€ applica il 20%, altrimenti non applicare alcuno sconto.