Moin!
Es ist sogar noch schlimmer: Du kannst ein Objekt nicht als Exception werfen, wenn es NICHT von "\Exception" erbt.
Jetzt einfach mal ungetestet gefragt...
Trifft das auch zu wenn man eine Exception nachbildet ohne über die Vererbung zu gehen?
Im Prinzip also jede Logik entfernt und nur ein Objekt wirft welches die selben Methoden und Attribute besitzt?
Das Manual sagt:
"The thrown object must be an instance of the Exception class or a subclass of Exception. Trying to throw an object that is not will result in a PHP Fatal Error."
Insofern: Nein, das "Nachbilden" funktioniert nicht, du mußt echt eine Instanz von \Exception werfen, oder eine davon erbende Klasse.
Einfach nur in einer Klasse dieselben Methoden zu implementieren reicht nicht aus. Ich vermute mal, ohne es am Code belegen zu können, dass eine Exception-Instanz interne PHP-Magie enthält, die beispielsweise für den in der Exception enthaltenen Stacktrace sorgt, sowie für das Gefangenwerden in Catch-Blöcken bzw. das finale Scheitern beim Nichtfangen.
Da try/catch ein Sprachkonstrukt ist, finde ich es nur normal, wenn die Exception-Klasse, von der alles erben muss, ebenfalls "besonders" ist.
- Sven Rautenberg