W3docs

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 esempio empty(trim($name)).

Quali valori sono "vuoti"?

Una variabile è vuota quando non esiste, oppure quando il suo valore è uno dei seguenti:

Valoreempty() restituisce
"" (string vuota)true
"0" (string zero)true
0 (intero zero)true
0.0 (float zero)true
nulltrue
falsetrue
[] (array vuoto)true
variabile non definitatrue
qualsiasi string non vuota (es. "hello")false
qualsiasi numero non zerofalse
un array non vuotofalse

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.

php— editable, runs on the server

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 variabileempty()isset()is_null()
non dichiaratatruefalseavviso + true
nulltruefalsetrue
"", 0, "0", []truetruefalse
"hello", 42falsetruefalse

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 tra 0/""/assente).
  • Usare is_null() quando si ha bisogno specificamente di rilevare null.

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 required

Qui ?? "" 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().

Pratica

Pratica
In PHP, quali caratteristiche ha la funzione 'empty()'?
In PHP, quali caratteristiche ha la funzione 'empty()'?
Was this page helpful?