dedlfix: Problem mit NULL

Beitrag lesen

Tach!

Wie würdest Du denn auf die Existenz einer Variablen testen, die Null enthalten kann?

isset() liefert false, egal ob sie tatsächlich existiert oder nicht. is_null() antwortet genau entgegengesetzt und wirft zusätzlich eine Notice bei Nichtvorhandensein. Selbst mit einem @ davor ist is_null() allein unbrauchbar. isset() und is_null() zu kombinieren bringt nichts.

is_null() und Testen auf eine Fehlermeldung ist unpraktisch, weil die Aussage von error_get_last() nicht auf eine bestimmte Anweisung zurückgeführt werden kann. $php_errormsg kann man zwar löschen und anschließend auf Inhalt prüfen.

ini_set('track_errors', 1);
  $php_errormsg = null; var_dump(@is_null($x) and !$php_errormsg);

Doch das kann man nicht in eine Funktion auslagern, weil beim Übergeben von nicht vorhandenen $x entweder eine Notice geworfen wird oder bei Übergabe als Referenz die Variable mit Inhalt null angelegt wird.

Bleibt am Ende wohl nur dieses Konstrukt:

var_dump(array_key_exists('x', get_defined_vars()) and is_null($x));

Das schaut in der aktuellen Variablenliste für den aktuellen Scope nach dem Vorhandensein des Namens der Variable und erst dann erfolgt der Test auf null. $GLOBALS statt get_defined_vars() schränkt auf den globalen Scope ein, ist also unbrauchbar. Zudem müssen andere Lösungen für Array-Elemente und Objekt-Eigenschaften gefunden werden, wenn man das braucht.

Apropos "braucht". Man braucht sowas eigentlich nicht. Nicht vorhandene Array-Elemente können nur in $_GET/$_POST/etc. vorkommen, und da ist null kein von PHP gesetzter Wert. Ansonsten hat man doch die Kontrolle über seine Variablen, oder man macht was falsch. (Zum Fehlersuchen bekommt man mit E_ALL und var_dump() eindeutige Aussagen.)

dedlfix.