Hi,
ich rätsle hier über ein Problem, dass ich nicht verstehe.
Es geht um Exception handling in PHP5.
also ich habe 3 klassen, die alle von einander erben (die parameter sind immer die der konstruktoren):
Exception (PHP5 intern)
--- SystemException($errorsignal, ...)
-------- IOException ($errorsignal, $filename)
--------------- FileNotFoundException($filename)
und eine ExceptionCollection klasse die direkt von SystemException konstruktor gefüttert wird. (ist auch nicht so wichtig, nur da ist mir der fehler erst aufgefallen.
Nun zum Problem:
also ich werfe FileNotFoundException('test.xml'). der konstruktor macht eigentlich nur:
parent:__construct("FileNotFound", $filename)
und die IOException::__construct($signal, $filname) macht im prinzip nur:
parent::__construct($signal, $filename)
SystemException macht dann die verarbeitung der exception und das hinzufügen zur ExceptionCollection
was ich nun nicht verstehe: ich habe obwohl ich FileNotFoundException nur einmal werfe zwei einträge in die ExceptionCollection. (Beide einträge vom typ: Object FileNotFoundException)
wenn ich mal einfach nur ein paar ausgaben rein machen sieht man das sowohl SystemException, als auch IOException zweimal ausgeführt werden (dadurch dann auch der doppelte eintrag in der collection) FileNotFoundException dagegeben nur einmal.
Aber es kommt noch bunter:
wenn ich jetzt in der FileNotFoundException::__construct() den aufruf der parent::__construct() aus kommentriere führt er den IOException::__construct trotzdem (einmal) aus noch noch besser ist er weiß sowohl das richtige $errorsignal also auch den $filename (es wird nicht in irgendwelche eigenschaften gespeichert oder ähnliches)
vielleicht könnt ihr mir das ja mal erklären?
hier noch ein paar code ausschnitte:
ich rätsle hier über ein Problem, dass ich nicht verstehe.
Es geht um Exception handling in PHP5.
also ich habe 3 klassen, die alle von einander erben (die parameter sind immer die der konstruktoren):
Exception (PHP5 intern)
--- SystemException($errorsignal, ...)
-------- IOException ($errorsignal, $filename)
--------------- FileNotFoundException($filename)
und eine ExceptionCollection klasse die direkt von SystemException konstruktor gefüttert wird. (ist auch nicht so wichtig, nur da ist mir der fehler erst aufgefallen.
Nun zum Problem:
also ich werfe FileNotFoundException('test.xml'). der konstruktor macht eigentlich nur:
parent:__construct("FileNotFound", $filename)
und die IOException::__construct($signal, $filname) macht im prinzip nur:
parent::__construct($signal, $filename)
SystemException macht dann die verarbeitung der exception und das hinzufügen zur ExceptionCollection
was ich nun nicht verstehe: ich habe obwohl ich FileNotFoundException nur einmal werfe zwei einträge in die ExceptionCollection. (Beide einträge vom typ: Object FileNotFoundException)
wenn ich mal einfach nur ein paar ausgaben rein machen sieht man das sowohl SystemException, als auch IOException zweimal ausgeführt werden (dadurch dann auch der doppelte eintrag in der collection) FileNotFoundException dagegeben nur einmal.
Aber es kommt noch bunter:
wenn ich jetzt in der FileNotFoundException::__construct() den aufruf der parent::__construct() aus kommentriere führt er den IOException::__construct trotzdem (einmal) aus noch noch besser ist er weiß sowohl das richtige $errorsignal also auch den $filename (es wird nicht in irgendwelche eigenschaften gespeichert oder ähnliches)
vielleicht könnt ihr mir das ja mal erklären?
hier noch ein paar code ausschnitte:
Code:
class SystemException extends Exception { function __construct($errorsignal) { //... SystemExceptionCollection::Add($this); } } class IOException extends SystemException { function __construct($errorsignal, $filename) { parent::__construct($errorsignal, $filename); } } class FileNotFoundException extends IOException { function __construct($filename) { parent::__construct("FileNotFound", $filename); } }
Kommentar