W3docs

if

La parola chiave "if" in PHP esegue codice in modo condizionale. In questo articolo esploriamo la sintassi e l'utilizzo dell'istruzione "if" in PHP.

L'istruzione PHP if

L'istruzione if è il modo in cui un programma PHP prende decisioni. Esegue un blocco di codice solo quando una condizione è vera, altrimenti lo salta. Senza di essa, uno script eseguirebbe ogni riga dall'alto verso il basso senza possibilità di diramazione — if è il fondamento di tutta la logica condizionale in PHP.

Questa guida copre la sintassi, come PHP determina se una condizione è "vera", la famiglia else/elseif, la sintassi alternativa con endif per i template, le scorciatoie come gli operatori ternario e null-coalescing, e gli errori che mettono in difficoltà i principianti.

Sintassi di base

if (condition) {
  // code that runs only when condition is true
}

La condition è qualsiasi espressione che PHP può valutare come vera o falsa. Se è vera, il codice all'interno delle parentesi graffe viene eseguito; se è falsa, PHP salta il blocco e continua dopo di esso.

<?php
$age = 20;

if ($age >= 18) {
  echo "You are an adult.";
}
// Output: You are an adult.

Le parentesi graffe sono opzionali quando il corpo contiene una sola istruzione, ma usale sempre — omettere le parentesi graffe è una fonte comune di bug, perché solo la prima istruzione viene trattata come corpo:

if ($age >= 18)
  echo "Adult";        // runs conditionally
  echo " — welcome";   // ⚠️ runs ALWAYS, it is not part of the if

Come PHP valuta le condizioni (truthy e falsy)

Una condizione non deve essere un letterale true/false — PHP converte qualsiasi valore in un boolean. Questi valori sono falsy (trattati come falso):

  • false
  • 0 e 0.0
  • "" (stringa vuota) e "0"
  • null
  • un array vuoto []

Ogni altro valore è truthy. Questo permette di scrivere controlli compatti:

<?php
$name = "";

if ($name) {
  echo "Hello, $name";
} else {
  echo "No name provided.";   // empty string is falsy
}
// Output: No name provided.

Per costruire le condizioni si usano tipicamente gli operatori di confronto e logici. Vedi PHP Operators per l'elenco completo.

<?php
$temp = 30;

if ($temp > 25 && $temp < 35) {     // logical AND
  echo "Warm but comfortable.";
}
// Output: Warm but comfortable.

Aggiungere else e elseif

if da solo gestisce un solo percorso. Per fornire un'alternativa, aggiungi un else; per testare più condizioni in ordine, concatena elseif:

<?php
$score = 72;

if ($score >= 90) {
  echo "Grade: A";
} elseif ($score >= 70) {
  echo "Grade: B";
} elseif ($score >= 50) {
  echo "Grade: C";
} else {
  echo "Grade: F";
}
// Output: Grade: B

PHP controlla ogni condizione dall'alto verso il basso ed esegue il primo blocco la cui condizione è vera, poi si ferma. Poiché $score è 72, il test >= 90 fallisce, >= 70 ha successo e il resto viene saltato.

Per capitoli dedicati su questi argomenti, vedi PHP else, PHP elseif, e la guida combinata if...elseif...else. Quando hai molti valori fissi da confrontare con una singola variabile, uno switch statement è spesso più chiaro.

Nidificare le istruzioni if

Puoi inserire un if all'interno di un altro per testare una seconda condizione solo quando la prima è verificata:

<?php
$loggedIn = true;
$role = "admin";

if ($loggedIn) {
  if ($role === "admin") {
    echo "Welcome to the admin panel.";
  } else {
    echo "Welcome back.";
  }
}
// Output: Welcome to the admin panel.

La nidificazione profonda peggiora la leggibilità — se ti ritrovi a tre livelli di profondità, considera di combinare le condizioni con && o di uscire prima (early return).

Sintassi alternativa (if: / endif)

Quando si mescola PHP con HTML nei template, la forma con i due punti e endif è più facile da leggere rispetto alle parentesi graffe sparse:

<?php if ($loggedIn): ?>
  <p>Welcome back!</p>
<?php else: ?>
  <p>Please log in.</p>
<?php endif; ?>

Questo si comporta esattamente come la versione con le parentesi graffe; è puramente una questione di stile per i file di vista.

Forma abbreviata: ternario e null coalescing

Per semplici assegnazioni "o l'uno o l'altro", l'operatore ternario condensa un if/else in una sola riga:

<?php
$age = 16;
$status = ($age >= 18) ? "adult" : "minor";
echo $status;
// Output: minor

Quando ti interessa solo se un valore esiste (e non è null), l'operatore null-coalescing ?? è più pulito di un if (isset(...)):

<?php
$config = [];
$timeout = $config["timeout"] ?? 30;   // use 30 if the key is missing
echo $timeout;
// Output: 30

Esempi pratici

<?php

// Example 1
$num = 10;

if ($num > 5) {
  echo "The number is greater than 5." . PHP_EOL;
}

// Output: The number is greater than 5.

// Example 2
$color = "red";

if ($color == "blue") {
  echo "The color is blue.";
} else {
  echo "The color is not blue.";
}

// Output: The color is not blue.

Errori comuni

  • = invece di ==. if ($x = 5) assegna 5 a $x ed è sempre truthy. Usa == (loose) o === (strict, senza conversione di tipo) per il confronto.
  • == vs ===. Con ==, 0 == "hello" e "1" == 1 possono sorprenderti perché PHP converte i tipi. Preferisci === quando i tipi devono corrispondere.
  • Mancanza di parentesi graffe attorno a un corpo multi-riga — solo la prima istruzione è condizionale.
  • Confusione con i valori truthy. if ($value) è falso per 0, "" e []; usa isset() o === null quando intendi specificamente "questo valore esiste."

Conclusione

L'istruzione if permette a un programma PHP di scegliere cosa fare a runtime. Padroneggia le regole truthy/falsy, usa elseif/else per gestire più percorsi, adotta la sintassi alternativa con endif nei template, e sfrutta gli operatori ternario e ?? per assegnazioni concise. Da qui, esplora i PHP loops per ripetere azioni e lo switch statement per le diramazioni basate su valori.

Pratica

Pratica
In PHP, come si può fare in modo che il programma decida quale blocco di codice eseguire?
In PHP, come si può fare in modo che il programma decida quale blocco di codice eseguire?
Was this page helpful?