phpbar.de logo

Mailinglisten-Archive

[php] Fehlerbehandlung mal anders: exceptions

[php] Fehlerbehandlung mal anders: exceptions

Ulf Wendel UW_(at)_NetUSE.DE
Mon, 21 Aug 2000 15:32:52 +0200


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