Ich bin kürzlich auf einen Code gestoßen, der einen benutzerdefinierten Fehlerhandler verwendet hat, um alle PHP-Fehler in eine generalisierte Anwendungsausnahme umzuwandeln. Ein benutzerdefinierter Ausnahmebehandler wurde ebenfalls definiert, der die Ausnahme protokolliert, wenn sie innerhalb eines bestimmten Fehlercodebereichs liegt. Beispiel:
%Vor%Das Problem ist, dass ich Dinge sah wie:
%Vor%Dies bedeutet, dass zwischen tatsächlichen Programmierfehlern und "außergewöhnlichem" Verhalten nicht unterschieden wird. Beim weiteren Ausgraben stieß ich auf Teile des Codes, die auf der Idee beruhten, dass PHP-Fehler ein "außergewöhnliches" Verhalten darstellen wie:
%Vor%Was zu Verschleierungsfehlern und dem Design der Anwendungsschnittstelle führt.
Was halten Sie davon, wie Sie mit Fehlern umgehen? Lohnt es sich, die systemeigenen Fehler von PHP in Ausnahmen umzuwandeln? Was tun Sie in Situationen wie oben, wo eine Codebasis um diese Idee herum entworfen wurde?
Persönlich mache ich das die ganze Zeit. Der einzige Unterschied ist, dass ich in meiner error_handler
-Funktion überprüfe, ob der Fehler ein E_NOTICE
zuerst ist, und nur werfe, wenn es nicht ist (ich melde mich trotzdem) ...
Ich würde AppException
auf etwas ändern, das ErrorException
erweitert ... Etwas wie: PhpRuntimeErrorException extends ErrorException
, das du NUR für PHP-Fehler benutzt ... Der Grund ist, dass es lesbarer ist (es ist einfacher zu sagen was a PhpRuntimeErrorException
ist ohne zu wissen, wo es geworfen wird. Der andere Grund ist, dass ErrorException
die generierenden Zeilen / Dateien / etc Informationen speichert, wo sie nicht woanders gespeichert werden (da das Backtrace von der throw
Zeile beginnt) ...
Also, dann können Sie Code wie folgt ausprobieren:
%Vor%Ich mache auch meine Standard-Ausnahmebehandlungsroutine eine 500 Server-Fehlerseite erzeugen. Das liegt daran, dass alle Ausnahmen abgefangen werden sollten. Wenn dies nicht der Fall ist, handelt es sich wirklich um einen Serverfehler ...
Nur meine Erfahrung und Meinung ...
In der PHP-Community wurde darüber diskutiert. Ich glaube, dass das allgemeine Denken ist, dass Fehler Dinge sind, die von internen PHP-Funktionen ausgelöst werden, und es sind Codierprobleme, die Sie wirklich beheben müssen; während Ausnahmen von Ihrem Anwendungscode ausgelöst werden, den Sie möglicherweise nur behandeln müssen.
Allerdings verwenden einige der neueren SPL-Erweiterungen (die tendenziell objektorientierter sind) Ausnahmen für Dinge, die zuvor möglicherweise Fehler verursacht haben, daher gibt es einige graue Bereiche.
Es gibt auch eine PHP-Kern-Klasse ErrorException - Ссылка , die ein wenig einfacher zu bedienen ist als Ihr Codebeispiel, wenn dies eine Route ist, die Sie abschalten möchten.
Tags und Links php exception-handling error-handling exception interface