![]() Mailinglisten-Archive |
..... Ollio ...... wrote: > Ich habe mir zwei Funktionen geschrieben: > > A. array2m_get --------------- Hier soll ein Wert aus einem > mehrdimensionalen assoziativen Array herauslesen oder NULL zur�ck > gegeben werden, falls die HASH-Schl�sselkombination nicht vorhanden > ist. Das ist zuerstmal eine Fehlerbedingung, diesen Fehler m�chte > aber mit CATCH abfangen um eben den definierten NULL-Wert > zur�ckzugeben: > > > function array2m_get ($arr, $merkmal1, $merkmal2) { $merkmal1 = > strtoupper($merkmal1); $merkmal2 = strtoupper($merkmal2); try { $e = > $arr[$merkmal1][$merkmal2] ; return $e } catch(Exception $e) { return > NULL; } B. array2m_collect 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 > > 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 In php "blubbert" eine Exception nach oben, bis sie abgefangen wird. Du kannst eine Exception an jeder beliebigen Position abfangen. Um eine Exception abzufangen muss allerdings erstmal eine Exception geworfen werden (irgendwie logisch). So wie ich das sehe gehst du davon aus, dass php hierbei: $arr[$merkmal1][$merkmal2] +=$wert; eine Exception wirft, wenn der Wert nicht existiert. Dem ist nicht so. Php wirft lediglich eine Notice (die du nicht wie eine Exception abfangen kannst) und legt der fehlenden Wert einfach an. Wenn du das nicht m�chtest, musst du vorher pr�fen ob der wert existiert: if (!isset($arr[$merkmal1][$merkmal2])) return null; (ich f�nde es allerdings auch logisch false zur�ckzugeben statt null. Yannik
php::bar PHP Wiki - Listenarchive