Menu

PHP empty(): stringhe vuote, array vuoti e 0

empty($var) restituisce true quando una variabile manca o è falsy: null, false, 0, 0.0, "", "0" o []. Non genera mai warning per variabili o chiavi non definite. Scopri perché "0" conta come vuoto, come verificare esattamente una stringa o un array vuoto, empty vs isset e la validazione dell'input dei form.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

empty($var) restituisce true se la variabile non esiste o se il suo valore è falsy: null, false, 0, 0.0, "", "0" o un array vuoto []. Per qualsiasi altro valore restituisce false. Come isset(), non genera mai warning per variabili o chiavi di array non definite.

empty($x) equivale a !isset($x) || !$x. In altre parole: manca, oppure si converte in false.

Quali valori sono vuoti

Scegli un valore nella tabella per vedere empty() accanto a isset() e al cast (bool). Ogni cella è stata calcolata da PHP 8.3.

empty, isset e (bool) per ogni valore di $x
Point at or tap a cell to read it as PHP.
$xemptyissetbool
null
false
0
0.0
""
"0"
[]
" "
"0.0"
"a"
"null"
[0]
1
-1
Every cell computed by PHP 8.3.19.

Le sorprese sono ai due estremi: "0" è vuoto, mentre " " (uno spazio), "0.0", "null" e [0] non lo sono.

"0" è vuoto: il bug classico

Dato che "0" è falsy, empty() tratta una quantità 0, un punteggio 0 o un PIN "0" come "nessun valore inserito". Succede spesso nei form, dove ogni valore arriva come stringa.

Per l'input testuale, il controllo affidabile per "nessun valore inserito" è trim($value) === "". Tieni empty() per i valori in cui 0 significa davvero niente.

Verificare se una stringa è vuota

Per verificare esattamente una stringa vuota, confronta con "". Per considerare vuoti anche gli spazi, applica prima trim. Da PHP 5.5 empty() accetta espressioni, quindi funziona anche empty(trim($s)) (ma con lo stesso problema di "0").

Da PHP 8.1 trim() non accetta null senza un avviso di deprecazione, ed è per questo che il blocco scrive trim($s ?? "").

Verificare se un array è vuoto

Per gli array, empty($arr), $arr === [] e count($arr) === 0 danno tutti la stessa risposta. empty() ha il vantaggio di funzionare su una variabile o una chiave che potrebbe non esistere.

array_filter() senza callback rimuove ogni valore falsy, quindi è un modo rapido per chiedere "questo array contiene qualcosa di concreto".

Validare un campo obbligatorio di un form

!empty() è un modo comune per rendere obbligatorio un campo, purché 0 non sia una risposta valida. Esegui questo blocco, lascia vuoti i campi e premi Send, poi compilali e invia di nuovo: lo script viene eseguito ancora con $_POST compilato.

Per la checkbox empty($_POST["terms"]) copre entrambi i casi: non inviata affatto, oppure inviata con un valore vuoto. La pagina sui form va oltre con messaggi di errore per ogni campo.

empty vs isset

Entrambi sono sicuri su variabili e chiavi non definite. Rispondono a domande diverse:

  • isset($x): esiste e non è null? Usalo per chiavi facoltative, checkbox e "è stato inviato o no".
  • !empty($x): esiste ed è truthy? Usalo per "contiene qualcosa di concreto", quando 0 e "0" non contano.
  • $x === "" o $x === []: è esattamente vuoto? Usalo quando 0 è un valore valido.

La pagina su isset copre l'altra metà, compreso isset() con più variabili insieme e la differenza da array_key_exists().

Domande frequenti

Quali valori considera vuoti empty() in PHP?

empty($x) è true quando $x non esiste oppure è null, false, 0, 0.0, "", "0" o []. Tutto il resto non è vuoto, compresi " " (uno spazio), "0.0", "false" e [0].

Perché "0" è vuoto in PHP?

empty() equivale a !$x senza il warning per le variabili non definite, e la stringa "0" si converte in false. Per questo empty() è sbagliato per i campi in cui 0 è una risposta valida; controlla invece $x === '' o trim($x) === ''.

Come verifico se un array è vuoto in PHP?

Funzionano sia empty($arr) sia $arr === [], e anche count($arr) === 0. empty() restituisce true anche quando la variabile non è impostata, mentre count() su una variabile non definita genererebbe un warning e poi lancerebbe un TypeError per null.

Quando usare empty() invece di isset()?

Usa isset() quando ti basta sapere che un valore esiste (una checkbox è stata inviata, una chiave di configurazione è presente). Usa !empty() quando il valore deve anche essere non vuoto, per esempio un campo di testo obbligatorio. Attenzione ai campi in cui 0 è valido, perché empty('0') è true.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA