Hello,
die() ist keine Fehlerbehandlung, sondern Schmuddelkram. Und in der OOP ist die() sowieso 'verboten', denn dort müsstest Du Exceptions nutzen, um keine undefinierten oder labilen Zustände zu erzeugen, oder Datenmüll zu hinterlassen.
Der erste Satz ist uneingeschränkt richtig.
Aber die Begründung vom zweiten Satz ist verbesserungswürdig. die()/exit hinterlässt unter PHP einen definierten Zustand, wie jedes andere Script-Ende auch.
Bezogen auf den reinen Prozessoranweisungsablauf schon, nicht aber bezogen auf den Prozessablauf. Der wird einfach an einer Stelle abgebrochen, unabhängig davon, ob logische Teile fertig abgehandelt wurde, oder nicht. Eben dieses Manquo will man schließlich in der OOP abfangen, indem man Exceptions benutzt.
Sogar Shutdown-Funktionen und Objekt-Destruktoren werden ausgeführt.
In der prozeduralen Programmierung, soweit man sie seit Existenz von Exit-Handlern, wie z.B. der Shutdown-Funktion überhaupt noch so nennen darf, muss man immer daran denken, für alle erzwungenen Abruchsszenarien einen Handler in die Exit-Chain einzutragen. Eben dies geschieht bei der OOP durch Verwendung von Exceptions wesentlich geordneter und "zuordnungsfähiger". Verschwindet die Methode, die die Exception wirft, findet auch keine Exception-Behandlung mehr dafür statt. OK, die Behandlungsmethode selbst bleibt vielleicht zurück, wird aber ja nicht mehr aktiviert.
Um das mit einer Exitroutinen-Kette zu ereichen, muss man sich schon ganz schön einen abkrampfen.
Daher sollte in einer prozeduralen Umgebung jede Funktion selber für eine (vorgangsbezogen) saubere Abwicklung sorgen und für die notwendigen Schutzmaßnahmen im Fehlerfall. Ein die() aktiviert hier aber den Exit-Handler. Der kann aber nicht wissen, von wo aus er aufgerufen wurde.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg