empty()
La funzione empty() in PHP verifica se una variabile è vuota: non esiste o ha un valore equivalente a false.
Introduzione
empty() è un costrutto del linguaggio PHP integrato che indica se una variabile è "vuota", ossia se non contiene un valore significativo. Viene usato principalmente per proteggersi da campi di form mancanti, chiavi di array assenti e variabili non inizializzate prima che il codice tenti di utilizzarle.
La cosa fondamentale da capire è che empty($var) è essenzialmente una scorciatoia per !isset($var) || $var == false. In altre parole, una variabile è vuota quando non esiste oppure il suo valore è uno dei valori "falsy" di PHP. Questa pagina spiega esattamente quali valori sono considerati vuoti, le insidie più comuni e quando usare empty() al posto di isset() o is_null().
Sintassi
bool empty(mixed $var)empty() accetta un unico argomento, $var, e restituisce un boolean: true se la variabile è considerata vuota, false altrimenti. Poiché è un costrutto del linguaggio e non una funzione regolare, può essere usato direttamente su variabili che potrebbero non esistere senza generare avvisi.
Nota: Prima di PHP 5.5,
empty()accettava solo una variabile. Le versioni moderne di PHP consentono anche espressioni, ad esempioempty(trim($name)).
Quali valori sono "vuoti"?
Una variabile è vuota quando non esiste, oppure quando il suo valore è uno dei seguenti:
| Valore | empty() restituisce |
|---|---|
"" (string vuota) | true |
"0" (string zero) | true |
0 (intero zero) | true |
0.0 (float zero) | true |
null | true |
false | true |
[] (array vuoto) | true |
| variabile non definita | true |
qualsiasi string non vuota (es. "hello") | false |
| qualsiasi numero non zero | false |
| un array non vuoto | false |
Questo corrisponde esattamente all'insieme dei valori che PHP tratta come false in un contesto boolean, più il caso in cui la variabile non è impostata.
Esempio d'uso
empty() non stampa nulla per false/0 e 1 per true quando usato con echo, quindi questo esempio converte il risultato in un'etichetta intera per chiarezza.
Qui definiamo sei variabili di tipi diversi: $var1 è una string vuota, $var2 è una string non vuota, $var3 è null, $var4 è 0, $var5 è la string "0" e $var6 è un array vuoto. empty() restituisce true per tutte tranne $var2. Si noti che echo stampa 1 per true e una string vuota per false; aggiungiamo 0-vs-1 nei commenti per rendere il risultato leggibile.
Insidie comuni
"0" è considerato vuoto
Questa è la sorpresa più comune. La string "0" è vuota secondo empty(), anche se contiene chiaramente un carattere. Questo è importante per i dati dei form: un utente che digita 0 in un campo quantità o età lo vedrà rifiutato se si usa empty() per la validazione.
<?php
$age = "0"; // a perfectly valid age from a form
var_dump(empty($age)); // bool(true) -- oops, treated as missing
var_dump($age === ""); // bool(false) -- the field was NOT blank
?>Se si vuole rifiutare solo un campo vuoto, confrontare con "" o usare isset() con un controllo sulla lunghezza invece di empty().
empty() non avvisa su variabili o chiavi non definite
A differenza dell'accesso diretto a una variabile, empty() è sicuro da chiamare su qualcosa che potrebbe non esistere. Restituisce true senza emettere alcun avviso.
<?php
$config = ["timeout" => 30];
var_dump(empty($config["timeout"])); // bool(false) -- key exists, value is 30
var_dump(empty($config["retries"])); // bool(true) -- key missing, no warning
var_dump(empty($undeclared)); // bool(true) -- no "undefined variable" notice
?>Questo rende empty() ideale per verificare chiavi di array opzionali, come i valori di $_POST o $_GET, senza dover chiamare prima isset().
empty() vs isset() vs is_null()
Queste tre funzioni sono facili da confondere. La differenza sta in quali stati trattano come "nessun valore":
| Stato della variabile | empty() | isset() | is_null() |
|---|---|---|---|
| non dichiarata | true | false | avviso + true |
null | true | false | true |
"", 0, "0", [] | true | true | false |
"hello", 42 | false | true | false |
In sintesi:
- Usare
isset()quando si vuole solo verificare se una variabile esiste e non ènull. - Usare
empty()quando si vuole sapere se è presente un valore utilizzabile (senza distinguere tra0/""/assente). - Usare
is_null()quando si ha bisogno specificamente di rilevarenull.
Una tipica protezione per un campo di form opzionale si presenta così:
<?php
$_POST = ["username" => " "]; // simulate a submitted form with a blank-ish field
if (empty(trim($_POST["username"] ?? ""))) {
echo "Username is required";
} else {
echo "Welcome, " . trim($_POST["username"]);
}
?>Output:
Username is requiredQui ?? "" fornisce un valore predefinito se la chiave è assente, trim() elimina l'input composto solo da spazi e empty() cattura sia il caso mancante che quello vuoto.
Conclusione
empty() è un comodo strumento per verificare se una variabile contiene un valore significativo, ed è sicuro da usare su variabili e chiavi di array che potrebbero non esistere. La principale insidia è che "0", 0 e le string vuote sono tutti considerati vuoti, quindi non è lo strumento giusto quando zero è un valore legittimo — in questi casi è preferibile isset() o un confronto esplicito. Per esaminare esattamente il contenuto di una variabile durante il debug, affiancarlo a var_dump() o gettype().