Menu

PHP isset(): verificare se una variabile o chiave esiste

isset($var) restituisce true quando una variabile esiste e non è null, altrimenti false, senza alcun warning. Controlla anche chiavi di array e proprietà di oggetti: isset($user['email']). Impara isset con più variabili, chiavi annidate, isset vs empty, isset vs array_key_exists e il controllo dell'invio dei form.

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

isset($var) restituisce true se la variabile esiste e il suo valore non è null. Restituisce false per una variabile non definita, rimossa con unset o che contiene null, e non stampa mai un warning.

isset() guarda solo se qualcosa c'è. Un valore impostato ma vuoto, come 0, "" o [], restituisce comunque true. Se ti serve "impostato e non vuoto", usa empty (negato).

Verificare se una chiave di array esiste con isset

È qui che isset() si usa di più. Leggere una chiave che non esiste stampa Warning: Undefined array key con una normale configurazione di PHP; controllarla prima con isset() no. Funziona anche con le chiavi annidate e si ferma in silenzio al primo livello mancante.

Quando ti servono solo il valore o un default, $user["website"] ?? "none" fa lo stesso controllo in un passo. Vedi l'operatore null coalescing.

isset con più variabili

Passa più argomenti e isset() restituisce true solo se sono tutti impostati e non null. È un modo breve per verificare che ogni campo obbligatorio sia arrivato.

isset su stringhe e oggetti

Su una stringa, isset($str[5]) controlla se c'è un carattere all'offset 5, il che è un rapido controllo della lunghezza. Su un oggetto, controlla una proprietà; per una classe con dati privati, isset() chiama il metodo __isset() se la classe lo definisce.

isset vs empty vs is_null

Scegli un valore di $x nella tabella per confrontare i tre controlli e il semplice cast (bool). Ogni cella è stata calcolata da PHP 8.3.

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

Lo schema da ricordare:

  • isset() è false solo per null e per ciò che non esiste.
  • empty() è true per questi e anche per ogni valore falsy: false, 0, 0.0, "", "0", [].
  • is_null() dà l'opposto di isset() per le variabili esistenti, ma genera un warning quando la variabile non è definita. Usa invece isset() o === null.

Verificare se un form è stato inviato

isset() è il modo classico per vedere se un campo di un form è arrivato. Esegui questo blocco, scrivi un nome e premi Send: lo stesso script viene eseguito di nuovo con $_POST compilato.

Un campo di testo vuoto viene comunque inviato, come "", quindi isset($_POST["name"]) è true dopo qualsiasi invio. Una checkbox non selezionata non viene inviata affatto, il che rende isset() il test giusto per le checkbox. Per richiedere un valore non vuoto, controlla la stringa dopo il trim come fa il blocco. La pagina sui form costruisce un form completo con la validazione.

isset vs array_key_exists

I due concordano su tutto tranne una chiave il cui valore è null. isset() la tratta come mancante, array_key_exists() no.

Se nei tuoi dati "impostato a null" significa qualcosa di diverso da "non configurato", usa array_key_exists(). Altrimenti isset() è più breve, ed essendo un costrutto del linguaggio e non una chiamata di funzione è anche un po' più veloce.

Errore comune: isset su un'espressione

isset() accetta solo variabili, elementi di array e proprietà. Passargli il risultato di una funzione o una costante è un errore di compilazione:

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

Salva prima il risultato in una variabile, oppure verifica direttamente il valore: null !== $expr come suggerisce il messaggio, o trim($input) !== "" per una stringa.

Domande frequenti

Cosa fa isset() in PHP?

isset($x) restituisce true se $x esiste e non è null, altrimenti false. Non genera mai un warning per una variabile o una chiave di array non definita, quindi è sicuro sui dati della richiesta come isset($_POST['email']).

Qual è la differenza tra isset() ed empty() in PHP?

isset() chiede "esiste e non è null"; empty() chiede "manca oppure è falsy". Per 0, "", "0" e [], isset() restituisce true ed anche empty() restituisce true. Per null o una chiave mancante, isset() è false ed empty() è true. !empty($x) equivale a isset($x) && $x valutato come truthy.

isset() può controllare più variabili?

Sì: isset($a, $b, $c) restituisce true solo se ognuna è impostata e non null. Si ferma alla prima che non è impostata.

Meglio isset() o array_key_exists()?

Differiscono solo quando la chiave esiste con valore null: isset($arr['k']) restituisce false, array_key_exists('k', $arr) restituisce true. Usa array_key_exists quando null è un valore salvato con un significato; altrimenti isset è più breve e un po' più veloce.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA