Tach!
Nicht abgefangene
Exceptions
würden ebenfalls das Programmm abnormal terminieren. Das ist der wohl kritischste Punkt. Jede Anweisung, die eineException
zur Folge haben kann, muss in einemtry/catch
-Block stattfinden und dercatch
-Block muss so getypt sein, dass er auch alle möglichen Fehler abfängt. Insbesondere muss man hier an Typfehler denken und dann gibt es leider auch ein paar Laufzeit-Fehler, die man in PHP überhaupt nicht abfangen kann.declare(strict_types=1)
, Linter und andere Code-Analyse-Tools können hier helfen.
PHP verwendet Exceptions nur an ganz wenigen Stellen. Die meisten Fehler werden mit dem herkömmlichen Error Reporting erzeugt und lassen sich auch nicht try-catchen. Stattdessen gibts die gute alte user-defined error handler function, die im Falle eines Fehlers aufgerufen wird. Ein Rücksprung oder Weitermachen wie nach einem catch ist da aber nicht vorgesehen. Da müsste man mit einem fiesen goto
vor die Endlosschleife springen. Das geht aber nicht, man kann nicht aus Funktionen herausspringen. So bleibt nur die Main-Funktion in einer Funktion zu kapseln, die man dann aus dem Error-Handler aufrufen kann. Womit sich aber eine Rekursion oder ein ähnlicher Zustand ergibt, besonders wenn der Fehler immer wieder ausgelöst wird.
Die erwähnten nicht abfangbaren Laufzeitfehler sind derart schwerwiegend, dass ein Abfangen nicht sinnvoll ist. Zum einen sind das Syntaxfehler, die man aber vermeiden kann. Zum anderen sind das solche Kaliber wie Out of Memory. Da kann man nichts mehr machen oder reparieren. Wenn der Speicher voll ist, ist da auch kein Platz mehr für den ErrorHandler-Aufruf.
dedlfix.