isset
La funzione "isset" in PHP verifica se una variabile è impostata e non è null. In questo articolo esploriamo la sintassi e l'utilizzo di "isset".
La funzione PHP isset()
isset() è un costrutto del linguaggio PHP che restituisce true quando una variabile esiste (è stata assegnata) e non è null. Restituisce false se la variabile non è mai stata impostata, è stata esplicitamente impostata su null, oppure è stata rimossa con unset().
Poiché leggere una variabile non definita genera un avviso Warning: Undefined variable in PHP, isset() è il metodo standard, privo di effetti collaterali, per chiedere "ho un valore utilizzabile qui?" prima di usarlo — ad esempio per proteggere l'accesso a $_GET, $_POST, o alle chiavi di un array che potrebbero non essere presenti.
Questo capitolo tratta la sintassi, la forma con argomenti multipli, il comportamento con array e proprietà di oggetti, e il confronto con strumenti correlati come empty() e l'operatore di coalescenza null.
Sintassi
isset(mixed $var, mixed ...$vars): boolUn controllo minimo si presenta così:
if (isset($myVariable)) {
echo "The variable is set.";
} else {
echo "The variable is not set.";
}isset() è un costrutto del linguaggio, non una chiamata a funzione, quindi non è necessario includere o importare nulla per utilizzarlo, e puoi passare più variabili contemporaneamente (trattato di seguito).
Esempi di base
<?php
// Example 1 — an assigned, non-null variable
$myVariable = "Hello, world!";
echo isset($myVariable) ? "set" : "not set"; // set
echo PHP_EOL;
// Example 2 — a variable that was never declared
echo isset($someOtherVariable) ? "set" : "not set"; // not set
echo PHP_EOL;
// Example 3 — a variable explicitly set to null
$empty = null;
echo isset($empty) ? "set" : "not set"; // not setOutput:
set
not set
not setIl terzo caso è la trappola principale: assegnare null è sufficiente per far restituire false a isset(), anche se la variabile esiste tecnicamente. Se hai bisogno di distinguere "mai dichiarata" da "dichiarata ma null", usa is_null() o array_key_exists().
Verifica di più variabili contemporaneamente
Quando passi più di un argomento, isset() restituisce true solo se ogni argomento è impostato e non-null. Questo è utile per verificare che un gruppo di campi del modulo obbligatori siano tutti arrivati insieme.
<?php
$name = "Ada";
$email = "[email protected]";
$phone = null;
var_dump(isset($name, $email)); // bool(true)
var_dump(isset($name, $email, $phone)); // bool(false) — $phone is nullisset() con gli array
isset() funziona sugli elementi degli array e controlla in modo sicuro le chiavi annidate senza generare un avviso quando manca una chiave intermedia.
<?php
$user = [
'name' => 'Ada',
'address' => ['city' => 'London'],
];
var_dump(isset($user['name'])); // bool(true)
var_dump(isset($user['missing'])); // bool(false)
var_dump(isset($user['address']['city'])); // bool(true)
var_dump(isset($user['address']['zip'])); // bool(false) — no warningNota che isset($array['key']) restituisce false quando il valore a quella chiave è null. Se una chiave può legittimamente contenere null e ti interessa solo sapere se la chiave è presente, usa array_key_exists().
isset() vs. empty() vs. l'operatore di coalescenza null
Questi tre vengono spesso confusi. La tabella mostra cosa restituisce ciascuno per lo stesso input:
Valore di $x | isset($x) | empty($x) |
|---|---|---|
"hello" | true | false |
0 o "0" o "" | true | true |
null | false | true |
| non definita | false | true |
Usa quindi isset() per chiedere "esiste un valore reale qui?", e empty() per chiedere "questo valore manca o è falsy (stringa vuota, 0, false, array vuoto)?".
Da PHP 7, l'operatore di coalescenza null ?? si basa sulla semantica di isset() per fornire un valore predefinito in un'unica espressione — è il sostituto idiomatico del ternario isset() ? : :
<?php
$config = ['theme' => 'dark'];
// Verbose, pre-PHP 7 style:
$theme = isset($config['theme']) ? $config['theme'] : 'light';
// Equivalent with the null coalescing operator:
$theme = $config['theme'] ?? 'light';
echo $theme; // dark$config['missing'] ?? 'light' restituisce 'light' senza alcun avviso, proprio perché ?? controlla isset() internamente.
Quando usare isset()
- Proteggere i dati opzionali delle richieste:
if (isset($_GET['page'])) { ... }. - Verificare i campi obbligatori prima di elaborare un modulo (
isset($a, $b, $c)). - Leggere in modo sicuro chiavi di array potenzialmente assenti in configurazioni o dati decodificati da JSON.
- Inizializzare un valore pigro una sola volta:
$cache ??= computeExpensiveValue();.
Usa uno strumento diverso quando hai bisogno di trattare null come "presente" (array_key_exists()), verificare il contenuto di oggetti/array per falsità (empty()), o rimuovere completamente una variabile (unset()).