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

..... Ollio ...... ollio at gmx.ch
Fre Feb 29 12:15:08 CET 2008


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
-- 
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger

php::bar PHP Wiki   -   Listenarchive