Also ich möchte eine eigene Exception Klasse für ein bereits vorhandens Projekt entwickeln und bin gerade an einem Punkt, wo ich leider nicht weiterkomme. Arbeite auch leider noch nicht so lange mit PHP, dass mir gerade das technische oder logische Verständnis fehlt und ich dachte ich hole mir Hilfe.
In dem Projekt, wo ich arbeite, arbeiten noch mehr al 10 weitere Leute, das Projekt ist mal so in paar Wochen entstanden und riesig geworden, aber genauso sieht der Code auch aus und ich bemühe mich jetzt einiges daraus zu machen, besser natürlich.
In diesem Projekt werden auch Exceptions geschmissen, diese will ich jetzt abfangen.
PHP erlaubt es mir einen Default Exception Handle zu definieren, was ich mit
PHP-Code:
/** define exception handling **/
set_exception_handler(array('FW', 'handleExceptions'));
getan habe. Hier verweise ich auf eine statische Methode der Klasse 'FW' nämlich der Methode 'handleExceptions'.
Hier ein Auszug der Methode in der Klasse 'FW'
PHP-Code:
class FW {
/**
* method to handle exceptions which not catch
* @access public static
* @param object $exception
* @return none
*/
public static final function handleExceptions(Exception $e) {
print $e;
}
}
Hier wird noch nicht viel verändert.
Jetzt habe ich mir eine Klasse gebastelt, die heißt 'SystemExceptions' und die erweitert die PHP Grundklasse 'Exceptions'.
PHP-Code:
class SystemException extends Exception {
}
Diese Klasse beinhaltet alle Grundfunktionen die ich später für die Verarbeitung der Exceptions brauche, ich habe hier jetzt mal keine Methoden angegeben.
Unter anderem soll diese Klasse sich auch um die Ausgabe kümmern. Es gibt verschiede Accesslevel in dem Script (naja, die Lösung mit Accessleveln ist so oder so etwas fraglich, aber wie gesagt, das Script ist unter großem Druck in kurzer Zeit entstanden).
Jetzt soll es aber zwei verschiedene Ausgaben geben, nämlich einmal für User und einmal für Admins. Also erweitere ich die Klasse um eine weitere 2 weitere Kindsklassen von 'SystemExceptions', die jeweils nur die Methode show() enthält, die sich um die jeweils unterschiedliche Ausgabe kümmert.
Hier der Code, zum Verständnis:
PHP-Code:
class PrintAdminSystemException extends SystemException {
public function show() {
}
}
class PrintUserSystemException extends SystemException {
public function show() {
}
}
So, jetzt habe ich also einen Baum, also die beiden Klassen 'PrintAdminSystemException' und 'PrintUserSystemException' erweitern schon meine selbst geschriebene Klasse 'SystemException', die wiederum die PHP Grundklasse 'EXceoption' erweitert. Ich soweit kann man mir folgen.
Jetzt zu meinem Problem.
- In den bisher geschrieben Scripten gibt es vielleicht Exceptions die so geworden wurden:
PHP-Code:
throw new Exception('bla',0);
Ich jedoch habe ja eine neue Klasse dafür entwickelt, nämlich SystemExceptions. Wie mache ich das jetzt, das die bereits vorhanden Scripte ihre Exception nicht an die PHP eigenen Exception Klasse werden, sondern an meine? - Irgendwie muss ich ja noch entscheiden, welche Ausgabe durchgeführt werden soll, also damit meine ich die beiden von mir angesprochen Klassen 'PrintAdminSystemException' und 'PrintUserSystemException', nur aufgerufen wird die Klasse SystemException. Gibt es jetzt die Möglichkeit, das die Klasse 'SystemException' dies im Konstruktor entscheidet und sich selber quasi nochmal neu aufruft mit einer der Print Klassen, die ja die eigentlich den gleichen Inhalt nur mit einer Methode mehr haben? Ist sehr schwer zu verstehen, ich weiß, vielleicht denke ich auch viel zu kompliziert, nur das war so meine Idee dazu. Gibt es dazu überhaupt eine Möglichkeit eine Klasse sich selbst aufrufen zulassen, was ich ja durch den Extend tue und seinen kompletten Inhalt an die nächste Klasse zu übergeben?
Hoffe das jemand aus dem schlau wird, was ich da vor habe und das mir jemand helfen kann, weil ich hänge dort wirklich fest und brauche das eigentlich relativ dringend. Ich meine das schöne an Klassen ist ja, das man dort jetzt nicht wirklich dran festhängt, sondern noch genug andere Stellen hat, an den man weiterarbeiten kann, aber fände es schon cool, wenn mir da vielleicht mal jemand unter die Arme greifen könnte.
Vorab schonmal viele Grüße
Higi