phpbar.de logo

Mailinglisten-Archive

[php] HOWTO: Catch von Exceptions die man nicht selber geworfen hat

[php] HOWTO: Catch von Exceptions die man nicht selber geworfen hat

Sebastian Mendel lists at sebastianmendel.de
Fre Feb 29 13:09:50 CET 2008


..... Ollio ...... schrieb:

> Hier sollen Werte auf einem mehrdimensionalen assoziativen Array aggregiert werden. D.h. wenn die Schlüsselkombination nicht vorhanden wird, wird ein Eintrag mit diesem Schlüssel angelegt und mit dem Wert initalisiert. Wenn schon vorhanden, wird der Wert zum bereits bestehenden hinzuaddiert:
> 
> function array2m_collect ($arr, $merkmal1, $merkmal2,$wert) {
> 	$merkmal1 = strtoupper($merkmal1);
> 	$merkmal2 = strtoupper($merkmal2);
>     try {
> 	       $arr[$merkmal1][$merkmal2] += $wert;
> 		}
> 		catch(Exception $e) {
> 		   $arr[$merkmal1][$merkmal2] = $wert;
> 		}
> 	
> }  // array2m_collect

Exception = Ausnahmen

ich meine, wenn du bereits weißt das du an einer Stelle etwas überprüfen 
musst damit es ordentlich funktioniert ist das keine Ausnahme.


> Problem
> ---------
> So wie es auf den ersten Blick aussieht, kann nun aber CATCH dummerweise Exceptions auffangen die im gleichen Funktionsblock geworfen werden.
> Gibt es eine Möglichkeit generell auf lokaler Ebene d.h. im akutuellen Block eine an beliebigem Ort geworfene Exception abzufangen und zu bearbeiten. Nicht handelbare Exceptions müsste dann einfach auf die nächst äussere Ebene weitergereicht werden. 
> 
> Ich kenne sowas z.B in der Microsoft-Programmierung z.B in VB. Dort werden Systemereignisse wie Exceptions allen interessierten. d.h. registrierten Fehlerbehandlungsroutinen angeboten. Dabei beginnt die Durchreichung eines Fehler vom lokalen, Detailcode. Alle nicht behandelten Fehler werden dann entlang der Hierarchie hochgereicht. Mit anderen Worten die Fehler eskalieren entlang der Systemhierarchie.
> 
> Ist so etwas in PHP (noch) nicht möglich? Was müsste ich tun, um das so zum laufen zu kriegen. Danke für euere Hinweise, Ollio

du musst in dem catch block einfach eine neue exception werfen wenn du sie 
dort nicht behandeln kannst, dann 'blubbert' sie weiter

-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive