Du hast keine Lust mehr auf die doofen Fehlermeldungen in PHP? Dann kannst du das mit set_error_handler erreichen. Davor bitte die Doku dazu lesen!

Hier mal ein Beispiel, wie sowas aussehen könnte:

set_error_handler('throwException', E_ALL);
function throwException($fehlercode, $fehlertext, $fehlerdatei, $fehlerzeile){
    throw new ErrorException($fehlertext, $fehlercode, 0, $fehlerdatei, $fehlerzeile);
}
trigger_error("foo-bar", E_ERROR);

Übrigens erzeugt „trigger_error“ den Fehler nicht weil „trigger_error“ aufgerufen wurde, sondern weil „trigger_error“ „E_ERROR“ als zweiten Parameter nicht akzeptiert. Ein echter E_ERROR also. :)
Leider ist es (noch) nicht möglich, für jeden Fehler Typen einen eigenen Handler zu definieren um zum Beispiel E_NOTICE Fehler anders zu behandeln als E_ERROR. Als zweiten Parameter akzeptiert set_error_handler (laut Doku) nur E_ALL oder E_STRICT. Könnte mir aber gut vorstellen, dass man das irgendwie austricksen kann.
Ich habe übrigens die ErrorException Klasse gewählt, da diese auch Dateiname und Zeile akzeptiert … wenn man diese Info schon mal hat, kann man diese ja auch gleich verwenden.
Als letzten Parameter kann man in der callback Funktion noch „$errcontext“ verwenden – der Inhalt ist bei einer Exception jedoch etwas fehl am Platz.

Nun wünsch ich allen die das wollen viel Spaß, denn damit wird das PHP Standard Fehler Handling ausgehebelt. Sowas wie z.B. „$resource = @fopen($irgendEineDatei);“ funktioniert dann nämlich nicht mehr bzw. ergibt eine schöne Exception falls ein Fehler auftritt. Das ist vor allem dann nervig, wenn man fremden Code einsetzt, der sich auf solche Konstrukte verlässt.

Advertisements