Ich muss überprüfen, ob der Wert als irgendetwas definiert ist, einschließlich null. isset
behandelt Nullwerte als undefiniert und gibt zurück false
. Nehmen Sie als Beispiel Folgendes:
$foo = null;
if(isset($foo)) // returns false
if(isset($bar)) // returns false
if(isset($foo) || is_null($foo)) // returns true
if(isset($bar) || is_null($bar)) // returns true, raises a notice
Beachten Sie, dass dies nicht $bar
definiert ist.
Ich muss eine Bedingung finden, die Folgendes erfüllt:
if(something($bar)) // returns false;
if(something($foo)) // returns true;
Irgendwelche Ideen?
isset
= ist gesetzt?, Ihre Variable ist auf null gesetzt. Ich habe viel Zeit wegen dieser verschwendet ...Antworten:
IIRC können Sie
get_defined_vars()
dafür verwenden:quelle
get_defined_vars
komme gerne mit dem Umfang zurecht.get_defined_vars()
:array_key_exists('foo', compact('foo'))
. Oder schneller, wenn Sie ein globales testen :array_key_exists('foo', $GLOBALS)
.Wenn Sie sich mit Objekteigenschaften befassen, die möglicherweise den Wert NULL haben, können Sie Folgendes verwenden:
property_exists()
anstelle vonisset()
quelle
Siehe Bester Weg, um die Existenz einer Variablen in PHP zu testen. isset () ist eindeutig defekt
quelle
Ich habe festgestellt, dass dies
compact
eine Funktion ist, die nicht gesetzte Variablen ignoriert, aber auf diejenigen wirkt, die auf eingestelltnull
sind. Wenn Sie also eine große lokale Symboltabelle haben, kann ich mir vorstellen, dass Sie eine effizientere Lösung für die Überprüfung erhalten können,array_key_exists('foo', get_defined_vars())
indem Sie Folgendes verwendenarray_key_exists('foo', compact('foo'))
:Aktualisieren
Ab PHP 7.3 gibt compact () einen Hinweis für nicht festgelegte Werte, sodass diese Alternative leider nicht mehr gültig ist.
quelle
compact
. Trotzdem habe ich es positiv bewertet, weil es in einer Situation nützlich ist: Wenn Sie wissen möchten, obfoo
es im aktuellen Kontext existiert , unabhängig davon, woher es stammt - wenn es Ihnen egal ist, ob es lokal oder global ist, möchten Sie nur wissen, ob es vorhanden ist existiert.get_defined_vars
. Siehe hier .Der folgende als PHP-Erweiterung geschriebene Code entspricht array_key_exists ($ name, get_defined_vars ()) (dank Henrik und Hannes).
quelle
Sie können is_null und empty anstelle von isset () verwenden. Leer gibt keine Fehlermeldung aus, wenn die Variable nicht vorhanden ist.
quelle
isset
.is_null
hat das gleiche Problem wieis_set
: Es kann nicht zwischen "nicht gesetzt" und "auf null gesetzt" unterscheiden, was das Problem ist, das OP hat.empty
ist noch schlimmer, wie Calum betont.Hier eine dumme Problemumgehung mit xdebug. ;-);
quelle
is_null($bar)
gibt true zurück, da es überhaupt keine Werte hat. Alternativ können Sie verwenden:um zu überprüfen, ob
$bar
definiert ist und nur dann true zurückgibt, wenn:quelle
if(isset($bar))
gibt falsch wann$bar = null
.$bar = "test"
).isset($bar)
wird auch danach false zurückgegeben$bar = null;
.