Exception Handler

Milliongame

Mitglied
Hallo,

ich habe über set_exception_handler() einen ExceptionHandler definiert, jedoch endet die Ausführung des Programms immer, nach dem dieser aufgerufen wurde. Hier der ExceptionHandler:

PHP:
function exceptionHandler($exception) {
	if ($exception instanceOf BasicException) {
		$exception->handleException();
	}
	
	if ($exception instanceOf AbstractFatalException) {
		exit;
	}
	
	return true;
}

Struktur / Vererbungsbaum der Exceptions:
BasicException -> AbstractDisplayAbleException -> AbstractFatalException

D.h. sobald eine AbstractFatalException oder deren Kinder geworfen wird, soll das Script beendet werden, nach dem diese behandelt wurde. Wird eine AbstractDisplayAbleException geworfen, soll das Script fortgesetzt werden, nach dem der ExceptionHandler ausgeführt wurde (ausgenommen AbstractFatalException und deren Kinderklassen).

Jedoch wird bei jeder Exception die den Handler passiert das Script beendet, Verdeutlichung:
PHP:
set_exception_handler('exceptionHandler');

throw new AbstractDisplayAbleException();

echo "weiter ausgeführt"; // wird nicht mehr angezeigt / behandelt

Muss der ExceptionHandler einen bestimmten Wert zurück geben oder muss ich etwas anderes beachten werden, damit das Script weiter fortgeführt wird?

Noch am Rande die Frage, soll ich lieber den InstanceOf-Operator benutzen oder die PHP-Funktion is_a() ?
 
Also zum allgemeinen Verständnis: Eine Exception ist immer eine Unterbrechung des Programmablaufs. Da ist nix mit "soll weiter ausgeführt werden". Wenn du bestimmten Code in jedem Falle ausgeführt haben willst, musst du um den Code, der eine Exception werfen könnte, ein try-catch drum herum codieren. Falls du aus der Java-Ecke kommst: ein finally gibts in PHP auch nicht.

Da instanceof und is_a() das gleiche machen, ist es belanglos und lediglich eine Frage es Geschmacks. Ich würde instanceof bevorzugen, da eine Funktion innerhalb von Klassen-Code das Code-Bild "stört". Wenn möglich verzichte ich auf Funktionen aus dem Standard-Namensraum und verwende lieber Klassen aus SPL. Bei manchen ist das nicht möglich, aber dort wo es geht... instanceof sieht im Klassen-Code einfach etwas schöner aus. Es ist eine Geschmacksfrage.
 
Zurück