else
La parola chiave "else" in PHP è una struttura di controllo usata insieme a "if" per eseguire un blocco di codice quando la condizione "if" è falsa.
La parola chiave PHP else
else è il complemento dell'istruzione if di PHP. Da sola, if decide solo se eseguire un blocco di codice; abbinarla a else permette di fornire un fallback che viene eseguito ogni volta che la condizione if risulta false. Insieme esprimono un singolo ramo chiaro: "fai questo — altrimenti, fai quello."
Questa pagina copre la sintassi esatta, la differenza tra else, elseif e una catena di if, la sintassi alternativa con i due punti usata nei template HTML e gli errori comuni in cui si incorre (come confondere = con ==).
Sintassi
Un blocco else può apparire solo immediatamente dopo un if (o dopo un elseif). Non prevede alcuna condizione propria:
<?php
if (condition) {
// runs when condition is truthy
} else {
// runs when condition is falsy
}Esattamente uno dei due blocchi viene eseguito, mai entrambi e mai nessuno dei due. Il ramo else intercetta tutto ciò che la condizione if non ha catturato — quindi non è necessario specificare manualmente la condizione opposta.
Un esempio di base
<?php
$myNumber = 5;
if ($myNumber == 4) {
echo "Number is 4";
} else {
echo "Number is not 4";
}
// Output: Number is not 4Poiché $myNumber vale 5, la condizione $myNumber == 4 è false, quindi il controllo passa al blocco else.
Cosa viene considerato "falso"?
Il blocco else viene eseguito ogni volta che la condizione if è falsy — non solo quando è letteralmente false. PHP considera falsy i seguenti valori: false, 0, 0.0, "0", "" (string vuota), null e l'array vuoto []. Tutto il resto è truthy.
<?php
$cart = [];
if ($cart) {
echo "You have items in your cart.";
} else {
echo "Your cart is empty."; // an empty array is falsy
}
// Output: Your cart is empty.Questo è utile per i controlli del tipo "c'è qualcosa qui?", ma bisogna essere precisi: "0" e 0 sono falsy, quindi un valore che interessa davvero può finire nel ramo else. Quando si ha bisogno di un test esatto, è meglio confrontare esplicitamente (if ($x === 0)) invece di affidarsi al truthiness.
else vs elseif vs if separati
Un semplice if/else ha solo due esiti. Quando ne servono più di due, è meglio usare elseif invece di impilare istruzioni if indipendenti:
<?php
$score = 72;
if ($score >= 90) {
echo "Grade: A";
} elseif ($score >= 70) {
echo "Grade: B";
} else {
echo "Grade: C or lower";
}
// Output: Grade: BLa catena si interrompe al primo ramo che corrisponde, quindi l'ordine è importante — mettere prima le condizioni più specifiche o più elevate. Usare due blocchi if separati valuterebbe entrambe le condizioni indipendentemente e potrebbe stampare due voti. Consulta PHP if, else, elseif per un confronto più completo.
Sintassi alternativa (con i due punti)
Quando si mescola PHP con HTML in un template, lo stile con le parentesi graffe può essere difficile da leggere. PHP offre una sintassi alternativa che sostituisce { con : e chiude il blocco con endif:
<?php $loggedIn = true; ?>
<?php if ($loggedIn): ?>
<p>Welcome back!</p>
<?php else: ?>
<p>Please log in.</p>
<?php endif; ?>Entrambi gli stili si comportano in modo identico; la forma con i due punti mantiene semplicemente i template più ordinati.
Annidamento
Un if/else può trovarsi all'interno di un altro ramo else. Ogni else si lega sempre all'if non ancora abbinato più vicino:
<?php
$age = 17;
$hasGuardian = true;
if ($age >= 18) {
echo "Admitted.";
} else {
if ($hasGuardian) {
echo "Admitted with a guardian.";
} else {
echo "Not admitted.";
}
}
// Output: Admitted with a guardian.Se ci si ritrova ad annidare più di uno o due livelli, elseif o un'istruzione switch risultano generalmente più leggibili.
Errore comune: = vs ==
Un bug frequente è scrivere = (assegnamento) al posto di == (confronto). La riga seguente assegna 4 a $x, e poiché 4 è truthy, il ramo if viene eseguito sempre — il ramo else diventa irraggiungibile:
<?php
$x = 1;
if ($x = 4) { // assignment, not comparison!
echo "Always runs";
} else {
echo "Never runs";
}
// Output: Always runsUsa == per il confronto generico o === per il confronto rigoroso (con verifica del tipo). La pagina degli operatori di confronto li elenca tutti.
Ternario: una forma abbreviata per i casi semplici
Quando entrambi i rami producono semplicemente un valore, l'operatore ternario ?: è un'alternativa compatta a un if/else completo:
<?php
$age = 20;
$status = $age >= 18 ? "adult" : "minor";
echo $status;
// Output: adultRiserva questo per decisioni brevi a valore singolo — la logica con più istruzioni rimane più chiara con un vero if/else.
Riepilogo
elseviene eseguito solo quando la condizione dell'if(oelseif) precedente è falsy; viene eseguito esattamente un ramo.- "Falsy" include
false,0,"",nulle[]— non solo il letteralefalse. - Usa
elseifper più di due esiti, e la sintassi con i due punti/endifall'interno dei template HTML. - Presta attenzione a
=vs==, e usa il ternario?:quando hai bisogno solo di scegliere un valore.