dedlfix: Problem mit NULL

Beitrag lesen

Tach!

if(!isset($r->text)) print "Not Set\n";
if(is_null($r->text)) print "Is NULL\n";

isset() funktioniert "nicht richtig", denn es liefert auch bei vorhandener Variable/Array-Element/Objekteigenschaft ein false, wenn deren Inhalt null ist. Insofern ist es nur zum Testen auf Nicht-Null-Werte geeignet. Dass es so arbeitet ist der Laxheit geschuldet, mit der einge PHP-Anwender ihren Code schreiben.

$foo = $_POST['foo'];
  vardump(isset($foo));

Abgesehen vom Unsinn des Umkopierens und der Tatsache, dass $foo nun definiv existiert (var_dump($GLOBALS);), egal ob $_POST['foo'] existierte oder nicht, liefert das isset() ein false, wenn durch die Nichtexistenz von $_POST['foo'] ein null in $foo zu stehen kommt.

Dass isset() nun doch wie vorgesehen arbeitet, liegt daran, dass man die Beschreibung durch einen Zusatz an die Funktionsweise angepasst hat: Determine if a variable is set and is not NULL.

isset() ist also eine ungeeignete Testmethode für Variablen, die null enthalten können, wenn man auf ihre Existenz prüfen will.

print_r($r);

print_r() eignet sich nicht zum Nachvollziehen von Inhalten wie null, false und Leerstring oder auch true und 1. Für alle drei gibt es einen Leerstring und die anderen beiden eine 1 aus. Eindeutig ist hingegen die Ausgabe von var_dump().

dedlfix.