empty
Scopri come empty() di PHP verifica se una variabile è vuota o non impostata, quali valori sono considerati vuoti e le differenze con isset().
Il costrutto linguistico PHP empty()
empty() è un costrutto linguistico PHP che indica se una variabile è vuota — ovvero se non esiste o contiene un valore che PHP considera "falsy" (come "", 0 o null). Poiché non emette mai un avviso per variabili non definite, è lo strumento ideale per verificare input opzionale come campi di form, parametri di query e valori di configurazione.
Questa pagina tratta la sintassi, l'elenco esatto dei valori considerati vuoti, gli errori comuni e le differenze tra empty() e i costrutti correlati isset() e is_null().
In senso stretto,
empty()è un costrutto linguistico, non una funzione, anche se viene scritto con le parentesi. Questa distinzione ha una conseguenza pratica — vedi Funziona solo con le variabili qui sotto.
Sintassi
<?php
if (empty($variable)) {
// $variable is empty (or does not exist)
}empty($variable) restituisce true quando la variabile è vuota e false altrimenti. È logicamente equivalente a !isset($variable) || $variable == false.
Cosa viene considerato vuoto
Una variabile è vuota quando non esiste o contiene uno di questi valori:
| Valore | Perché è vuoto |
|---|---|
| variabile non impostata / non definita | la variabile non è mai stata assegnata |
null | il tipo "nessun valore" |
false | il boolean false |
0 (int) e 0.0 (float) | zero numerico |
"0" (string) | la string contenente uno zero singolo — una classica sorpresa |
"" (string vuota) | una string senza caratteri |
[] (array vuoto) | un array senza elementi |
Tutto il resto — inclusi "0.0", " " (uno spazio), "false" e l'array [0] — non è vuoto.
La regola per
"0"è quella che inganna di più. Un numero civico, un codice postale o un termine di ricerca pari a"0"verrà segnalato come vuoto. Se uno zero letterale è un valore valido, controlla la lunghezza o confronta esplicitamente invece di usareempty().
Esempi
<?php
// Example 1 — empty string
$myVariable = "";
if (empty($myVariable)) {
echo "Variable is empty" . PHP_EOL;
} else {
echo "Variable is not empty" . PHP_EOL;
}
// Example 2 — empty array
$myArray = [];
if (empty($myArray)) {
echo "Array is empty" . PHP_EOL;
} else {
echo "Array is not empty" . PHP_EOL;
}
// Output:
// Variable is empty
// Array is emptyUn caso d'uso pratico: validare l'input di un form
empty() è particolarmente utile per proteggere da dati di richiesta mancanti o vuoti, perché verifica "non impostato" e "vuoto" in un'unica espressione:
<?php
$username = $_POST['username'] ?? null;
if (empty($username)) {
echo "Please enter a username." . PHP_EOL;
} else {
echo "Welcome, $username!" . PHP_EOL;
}
// With $_POST['username'] missing or "" → "Please enter a username."
// With $_POST['username'] = "Sam" → "Welcome, Sam!"Il problema con "0" in azione
<?php
$values = ["", "0", "0.0", "hello", " "];
foreach ($values as $value) {
$state = empty($value) ? "empty" : "not empty";
echo "'$value' is $state" . PHP_EOL;
}
// Output:
// '' is empty
// '0' is empty
// '0.0' is not empty
// 'hello' is not empty
// ' ' is not emptySi noti che "0" viene segnalato come vuoto, ma "0.0" e uno spazio singolo non lo sono.
Funziona solo con le variabili
Poiché empty() è un costrutto linguistico, può essere usato solo su variabili — passare il risultato di un'espressione o di una chiamata a funzione è un errore di sintassi prima di PHP 5.5 e in generale una trappola logica da evitare:
<?php
// Valid — argument is a variable:
$name = trim(" ");
if (empty($name)) {
echo "Name is blank";
}
// Avoid — empty(trim($name)) reads awkwardly; assign first, as above.empty() vs isset() vs is_null()
Questi tre costrutti sono facili da confondere. La tabella mostra cosa restituisce ciascuno per gli stessi input:
| Input | empty() | isset() | is_null() |
|---|---|---|---|
| variabile non definita | true | false | warning + true |
null | true | false | true |
"" | true | true | false |
0 / "0" | true | true | false |
false | true | true | false |
[] | true | true | false |
"hello" | false | true | false |
Regole pratiche:
- Usa
isset()per chiederti "questa variabile esiste e non ènull?" — ideale per le chiavi degli array e le proprietà degli oggetti. - Usa
is_null()per chiederti "questo valore è esattamentenull?" e nient'altro. - Usa
empty()per chiederti "manca questo valore oppure è vuoto?" — il controllo più ampio e permissivo.
Conclusione
empty() offre un modo unico e senza avvisi per verificare se una variabile è mancante o contiene un valore falsy, il che la rende adatta per validare input opzionale. Tieni a mente la regola per "0", ricorda che accetta solo variabili, e usa isset() o is_null() quando hai bisogno di un controllo più preciso. Per ulteriori informazioni sui valori su cui operano questi controlli, vedi PHP Data Types e PHP Variables.