Mailinglisten-Archive |
Ahoi, hier sind zwei Ideen für Exceptions in PHP. Der erste, interessantere Ansatz kombiniert Ideen von Johann-Peter [Hartmann] und Matthias [Lange], bietet jedoch keinen Stack, weil das Callback unmittelbar ausgeführt wird. Der zweite Ansatz bietet einen "Stack" und funktioniert auch mit PHP3. Beide Ansätze dürften nicht sehr performant sein. Mit einer Kombination der Ansätze und einer optionalen Caller-ID sollte es möglich sein Java Exceptions im vollen Umfang nachzubauen. ... und jetzt kommt bitte keiner mit dem Hinweis auf set_error_handler() ;-) Ulf +++ PHP4: Exceptions über Callback +++ function try_catch($try, $catch) { global $lambda; $catch = 'global $php_errormsg; $exception = unserialize($php_errormsg); $catch'; $lambda = create_function("", $catch); assert_options( ASSERT_CALLBACK, $lambda); assert($try); } function throw($classname, $msg) { $level = error_reporting( E_ALL ); $exception = new $classname($msg); _(at)_trigger_error( serialize($exception) ); error_reporting ( $level ); } +++ PHP3: Exceptions via Stack +++ function try_catch($try, $catch) { global $_exception_stack; $_exception_stack = array(); eval($try); if (0!=count($_exception_stack)) { eval($catch); $_exception_stack = array(); } } function throw($classname, $msg) { global $_exception_stack; if (!isset($_exception_stack)) $_exception_stack = array(); $exception = new $classname($msg); $_exception_stack[$classname] = $exception; } -- Ulf Wendel NetUSE AG, Siemenswall, 24107 Kiel, Germany Fon: +49 431 386435 00 -- Fax: +49 431 386435 99
php::bar PHP Wiki - Listenarchive