PHP Test - Fehlerlevel

Bei den Tests mit der PHP Fehlerbehandlung fielen mir ein paar doch recht erstaunliche (oder sollte ich eher sagen befremdliche) Dinge auf. Prinzipiell lassen sich PHP Fehler nicht mittels try-catch abfangen, das ist den Exceptions vorbehalten, einem Konzept, das viel später eingeführt wurde. So leben die Fehler zumindest aus Tradition und Kompatibilitätsgründen weiter. Alle Fehler geben eine Meldung aus, die man mittels der Funktion error_reporting() unterdrücken kann. Ansonsten lassen sie sich grob in drei Gruppen einteilen:
  • Das Programm läuft munter weiter, dazu gehören beispielweise E_NOTICE oder E_WARNING.
  • Das Programm wird normalerweise beendet, aber man kann den Fehler durch eigene Error Handler abfangen. Implementiert habe ich das hier im Beispiel für E_RECOVERABLE_ERROR oder E_USER_ERROR.
  • Das Programm wird beendet, es gibt keine empfohlene Methode zum Abfangen. Bisher habe ich nur E_ERROR in dieser Gruppe gefunden.
Nur in der ersten Gruppe kann man den Fehler analysieren, indem man die Methode error_get_last() verwendet. Nutzt man einen eigenen Error Handler, dann bietet der Zugriff auf die gleichen Informationen wie das von error_get_last() gelieferte Array. Ich habe eine Klasse mit statischen Funktionen verwendet, um die Informationen des Error Handlers global verfügbar zu machen.

Ich konnte bisher für die meisten Fehler ein Beispiel finden, um es zu Laufzeit zu erzeugen. Das kann man hier testen (Schaltfläche unter der Tabelle) und es gibt eine Kurzbeschreibung zur Fehlererstellung. Leider fehlen mir bisher noch Beispiele für E_CORE_ERROR, E_CORE_WARNING und E_COMPILE_ERROR. Eventuell kann man die überhaupt nicht zur Laufzeit erzeugen. Wenn jemand ein Beispiel hat oder näheres weiß, dann soll er mich doch bitte informieren.

Weitere Details zur den Fehlercodes siehe PHP Konstante. Ich stelle diesen Code auch zum hier zum Download bereit.

Mögliche Fehlerlevel
TestKonstanteDezimalDualKurzbeschreibung
E_ERROR11fatal run-time errors
E_WARNING210run-time warnings (non-fatal errors)
E_PARSE4100compile-time parse errors
E_NOTICE81000run-time notices (these are warnings which often result
E_CORE_ERROR1610000fatal errors that occur during PHP initial startup
E_CORE_WARNING32100000warnings (non-fatal errors) that occur during PHP Start
E_COMPILE_ERROR641000000fatal compile-time errors
E_COMPILE_WARNING12810000000compile-time warnings (non-fatal errors)
E_USER_ERROR256100000000user-generated error message
E_USER_WARNING5121000000000user-generated warning message
E_USER_NOTICE102410000000000user-generated notice message
E_STRICT2048100000000000run-time notices, enable to have PHP suggest changes
E_RECOVERABLE_ERROR40961000000000000almost fatal run-time errors
E_DEPRECATED819210000000000000warn about code that will not work in future versions
E_USER_DEPRECATED16384100000000000000user-generated deprecation warnings
E_ALL32767111111111111111All errors and warnings (includes E_STRICT as of PHP 5.4.0)
PHP Fehleranzeige beim Test unterdrücken