isset() Prüfung schlägt fehl

Die Prüfung auf definierte Schlüssel in einem PHP-Array kann wie folgt vorgenommen werden:

$data = array(
    'id' => 4711,
    'value' => NULL
);

if( isset( $data['id'] ) ) {
 echo "id existiert!\n";
}
if( isset( $data['value'] ) ) {
 echo "value existiert!\n";
}

Es kann jedoch vorkommen, dass hinter einem Eintrag der Wert NULL gespeichert ist. Die Funktion isset() wird dann das Vorhandensein des Eintrags dennoch als FALSE werten und damit wird dem Entwickler bzw. dem ursprünglichen Programmfluss weisgemacht, dass der Eintrag nicht vorhanden ist und mit dieser falschen Annahme die Programmausführung fortsetzen und zu unbegreiflichen Ergebnissen führen.

Wer mag kann das gerne auf der Konsole mit folgendem Abruf verifizieren:

php -r '$data=array("id"=>4711,"value"=>NULL);if(isset($data["id"])){echo "id existiert!\n";}if(isset($data["value"])){echo "value existiert!\n";}'

Ich persönlich habe bisher immer die isset()-Prüfung genutzt da sie deutlich intuitiver wirkt. Es ist auch immer gut gegangen oder nicht besonders aufgefallen. Es ist daher unabdingbar, vor allem bei Variablen die nun mal auch NULL beinhalten können, immer die oben aufgeführte Beispiel wie folgt abzuändern:

$data = array(
    'id' => 4711,
    'value' => NULL
);

if( array_key_exists( 'id', $data ) ) {
 echo "ID existiert!\n";
}

if( array_key_exists( 'value', $data ) ) {
 echo "value existiert!\n";
}

Genauso ist dieses Verhalten auf PHP.net auch dokumentiert, nur dass der Funktionsname selbst einem eine andere Funktionalität suggeriert.

Fazit:

Da dies auch für die Verwendung außerhalb von Arrays auf normale Variablen zutrifft sollte man auf die Verwendung von isset() generell verzichten und nur noch auf array_key_exists() zurückgreifen um ungewünschte Nebeneffekte in seinen Programmen zu vermeiden. Wer dies dennoch tut sollte sicherstellen, dass die zu prüfenden Variablen niemals NULL-Werte enthalten.

Veröffentlicht von

Sebastian

Als erfahrener Softwarentwickler entwickelt Sebastian in einer Softwareschmiede in Bonn Individualsoftware mit den Schwerpunkten in PHP und MySQL.

Er hat eine pfiffige Frau sowie drei quirlige Söhne, fährt gerne Auto und liebt handwerkliche Arbeiten die im häuslichen Umfeld so anfallen.