Jan: komplexes Error-Handling

Beitrag lesen

Hi,
ich kann dir hier keine vollstaendige Loesung geben, aber ein paar kleine Steine aus dem Weg raeumen.

Jetzt überlege ich wie ich ein zenttrales Error-Handling  Objekt einbinden könnte. Dazu habe ich mir PEAR::isError() ausgeguckt(http://pear.php.net/manual/en/class.pear.php), da ich davon viel Gutes gehört habe und mir sicher bin das ich es selbst in annehmbarer Zeit nicht besser hinbekommen würde.

sehr loeblich, PEAR ist einfach zu gut um ignoriert zu werden.

Soweit ich PEAR jetzt verstanden haben muß ich mir für alle Fehlerarten eine eigene Callback-Funktion schreiben, die ich dann ggfs aufrufen kann. z.B. für HTTP-Fehler eine Funktion die eine Fehlerseite erzeugt und für die Logs einen HTTP-Error Header sendet.

genau.

Für PHP-Funktionen muß ich dann auch jedesmal eine if-Abfrage machen ob die Funktion funktioniert hat und sonst meine Call-Back-Funktion aufrufen.

nein, wenn deine funktion nicht funktioniert ein PEAR::raiseError() absetzten, oder deine funktionen im fehlerfall ein PEAR::Error objekt zurueckgebenlassen und das mit PEAR::isError testen.

Problematischer wird die Sache bei Smarty, das hat ja einen eigenen Error-Handler, wie kann ich das am besten mit meinem Handler in Einklang bringen?

ich kenne den smartyhandler jetzt nicht aber kannst du nicht 'wenn smarty fehler, dann PEAR error raisen' irgendwo einbauen?

Doof ist das auch mit Klassen, muß ich dann jede Klasse als Erweiterung der PEAR-Klasse schreiben? (... extends PEAR)

nein, nur wenn du innerhalb der klasse ein objekt (klasseninstanz) gebundenes error objekt behandelt willst. (a la $this->raiseError()) anderfalls reicht ein statischer aufruf mit PEAR::raiseError() (PEAR.php muss natuerlich vorher eingefuegt werden)

Wie macht man das sinnvollerweise mit PEAR?

ich wuerde mir jetzt die isValid() funktion so implementieren, dass sie im falle eines fehlers ein error objekt zurueckgibt

$res = isValid($FOO);
if(PEAR::isError($res) { ... }

Und noch eine (peinliche) Frage:
Wohin schreibe ich meien Error_callback Funktionen? Ganz einfach irgendwo in das Script, doer kannich dafür nicht eine eigene Klasse mit entsprechenden Methoden verwenden?

du kannst auch eine klasse bzw. ein objekt verwenden. statt des funktionsnamens gibst du einfach ein array('klassenname', 'methodenname') oder array($objekt, 'methodenname') an.

Jan
--