Manchmal sucht man Fehler, die man wieder und wieder überliest, weil man die
falschen Annahmen getroffen hat und der Code oberflächlich richtig aussieht.
Erfahrungsgemäß gibt es dann ein paar “übliche Verdächtige”, die man sich
genauer anschaut. Zuweisungen im
if
-Statement,
Vergleiche ohne Typprüfung, empty()
und
isset()
sind dabei immer heiße Kandidaten.
Wenn man die Handbuch-Seite zu isset()
durchliest, klingt es, als wäre es
problemlos möglich auch die Existenz von Array-Keys zu prüfen. Sogar ein
schönes Beispiel gibt es dazu:
Doch ganz so einfach ist es leider nicht. Interessant ist hier vor allem die
letzte Zeile. Erst auf den zweiten Blick fällt auf, dass als erster Schlüssel
“cake” statt “pie” verwendet wird. Und das ist der einzige Grund dafür, dass
FALSE
zurückgegeben wird. Ändert man nämlich den ersten Schlüssel auf “pie”,
wird TRUE
zurückgegeben, auch wenn der dritte Key nicht existiert:
Das Problem und die Lösung wird auch in einem Kommentar von
2004 angesprochen. Die Prüfung
mit isset()
reicht nicht aus. Zusätzlich muss auf den vorletzen Key mit
is_array()
geprüft werden:
Wichtig ist hier auch, dass man zuerst das isset()
und danach das
is_array()
schreibt, sonst bekommt man einen Undefined-index-Fehler, wenn der
Schlüssel komplett nicht vorhanden ist. Ein alleinstehendes isset() in
Verbindung mit einem Array sollte einen also immer misstrauisch machen. Je nach
Fall sollte ein is_array()
ergänzt oder ein
array_key_exists()
bevorzugt werden.