W3docs

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 4

Poiché $myNumber vale 5, la condizione $myNumber == 4 è false, quindi il controllo passa al blocco else.

"Provalo tu stesso" non è disponibile per questo esempio.

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: B

La 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 runs

Usa == 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: adult

Riserva questo per decisioni brevi a valore singolo — la logica con più istruzioni rimane più chiara con un vero if/else.

  • else viene eseguito solo quando la condizione dell'if (o elseif) precedente è falsy; viene eseguito esattamente un ramo.
  • "Falsy" include false, 0, "", null e [] — non solo il letterale false.
  • Usa elseif per più di due esiti, e la sintassi con i due punti/endif all'interno dei template HTML.
  • Presta attenzione a = vs ==, e usa il ternario ?: quando hai bisogno solo di scegliere un valore.

Esercitati

Pratica
Cosa indica l'istruzione 'else' in PHP?
Cosa indica l'istruzione 'else' in PHP?
Was this page helpful?