From: Stig Bakken Date: Mon, 16 Apr 2001 21:45:21 +0000 (+0000) Subject: * make the error class used by raiseError configurable (_error_class property, X-Git-Tag: php-4.0.6RC1~402 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee17aae3acee24cc0a8dec3a5d0868abb208976d;p=php * make the error class used by raiseError configurable (_error_class property, overridden by first parameter to constructor) --- diff --git a/pear/PEAR.php.in b/pear/PEAR.php.in index b9d238259e..763162686a 100644 --- a/pear/PEAR.php.in +++ b/pear/PEAR.php.in @@ -40,6 +40,14 @@ if (substr(PHP_OS, 0, 3) == 'WIN') { define('PEAR_OS', 'Unix'); // blatant assumption } +if (!defined("DIRECTORY_SEPARATOR")) { + if (OS_WINDOWS) { + define("DIRECTORY_SEPARATOR", "\\"); + } else { + define("DIRECTORY_SEPARATOR", "/"); + } +} + $_PEAR_default_error_mode = PEAR_ERROR_RETURN; $_PEAR_default_error_options = E_USER_NOTICE; $_PEAR_default_error_callback = ''; @@ -76,6 +84,7 @@ class PEAR var $_default_error_mode = null; var $_default_error_options = null; var $_default_error_handler = ''; + var $_error_class = 'PEAR_Error'; // }}} @@ -86,12 +95,15 @@ class PEAR * $_PEAR_destructor_object_list for destructor emulation if a * destructor object exists. */ - function PEAR() + function PEAR($error_class = null) { $classname = get_class($this); if ($this->_debug) { print "PEAR constructor called, class=$classname\n"; } + if ($error_class !== null) { + $this->_error_class = $error_class; + } while ($classname) { $destructor = "_$classname"; if (method_exists($this, $destructor)) { @@ -219,10 +231,10 @@ class PEAR // {{{ raiseError() /** - * This method is a wrapper that returns an instance of PEAR_Error - * with this object's default error handling applied. If the - * $mode and $options parameters are not specified, the object's - * defaults are used. + * This method is a wrapper that returns an instance of the + * configured error class with this object's default error + * handling applied. If the $mode and $options parameters are not + * specified, the object's defaults are used. * * @param $message a text error message * @param $code a numeric error code (it is up to your class @@ -285,7 +297,8 @@ class PEAR } } } - return new PEAR_Error($message, $code, $mode, $options, $userinfo); + $ec = $this->_error_class; + return new $ec($message, $code, $mode, $options, $userinfo); } // }}} @@ -501,6 +514,18 @@ class PEAR_Error return $this->getUserInfo(); } + // }}} + // {{{ addUserInfo() + + function addUserInfo($info) + { + if (empty($this->userinfo)) { + $this->userinfo = $info; + } else { + $this->userinfo .= " ** $info"; + } + } + // }}} // {{{ toString() @@ -524,7 +549,7 @@ class PEAR_Error } return sprintf('[%s: message="%s" code=%d mode=callback '. 'callback=%s prefix="%s" prepend="%s" append="%s" '. - 'debug="%s"]', + 'info="%s"]', get_class($this), $this->message, $this->code, $callback, $this->error_message_prefix, $this->error_prepend, $this->error_append, diff --git a/pear/tests/pear_error.phpt b/pear/tests/pear_error.phpt index 9e59d3221f..6b5ce87df6 100644 --- a/pear/tests/pear_error.phpt +++ b/pear/tests/pear_error.phpt @@ -13,6 +13,24 @@ require_once "PEAR.php"; error_reporting(4095); +class Foo_Error extends PEAR_Error { + function Foo_Error($message = "unknown error", $code = null, + $mode = null, $options = null, $userinfo = null) + { + $this->PEAR_Error($message, $code, $mode, $options, $userinfo); + $this->error_message_prefix = 'Foo_Error prefix'; + } +} + +class Test1 extends PEAR { + function Test1() { + $this->PEAR("Foo_Error"); + } + function runtest() { + return $this->raiseError("test error"); + } +} + function errorhandler(&$obj) { print "errorhandler function called, obj=".$obj->toString()."\n"; } @@ -23,6 +41,11 @@ class errorclass { } } +print "specify error class: "; +$obj = new Test1; +$err = $obj->runtest(); +print $err->toString() . "\n"; + $eo = new errorclass; print "default PEAR_Error: "; @@ -79,26 +102,27 @@ print $err->toString() . "\n"; --GET-- --POST-- --EXPECT-- -default PEAR_Error: [pear_error: message="unknown error" code=0 mode=return level=notice prefix="" prepend="" append="" debug=""] +specify error class: [foo_error: message="test error" code=0 mode=return level=notice prefix="Foo_Error prefix" prepend="" append="" info=""] +default PEAR_Error: [pear_error: message="unknown error" code=0 mode=return level=notice prefix="" prepend="" append="" info=""] Testing it: bool(true) This is not an error: bool(false) Now trying a bunch of variations... -different message: [pear_error: message="test error" code=0 mode=return level=notice prefix="" prepend="" append="" debug=""] -different message,code: [pear_error: message="test error" code=-42 mode=return level=notice prefix="" prepend="" append="" debug=""] -mode=print: test error[pear_error: message="test error" code=-42 mode=print level=notice prefix="" prepend="" append="" debug=""] -mode=callback(function): errorhandler function called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorhandler prefix="" prepend="" append="" debug=""] -mode=callback(method): errorhandler method called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorclass::errorhandler prefix="" prepend="" append="" debug=""] +different message: [pear_error: message="test error" code=0 mode=return level=notice prefix="" prepend="" append="" info=""] +different message,code: [pear_error: message="test error" code=-42 mode=return level=notice prefix="" prepend="" append="" info=""] +mode=print: test error[pear_error: message="test error" code=-42 mode=print level=notice prefix="" prepend="" append="" info=""] +mode=callback(function): errorhandler function called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorhandler prefix="" prepend="" append="" info=""] +mode=callback(method): errorhandler method called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorclass::errorhandler prefix="" prepend="" append="" info=""] mode=print&trigger: test error
-Notice: test error in PEAR.php on line 327
-[pear_error: message="test error" code=-42 mode=print|trigger level=notice prefix="" prepend="" append="" debug=""] +Notice: test error in /usr/local/lib/php/PEAR.php on line 399
+[pear_error: message="test error" code=-42 mode=print|trigger level=notice prefix="" prepend="" append="" info=""] mode=trigger:
-Notice: test error in PEAR.php on line 327
-[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" prepend="" append="" debug=""] +Notice: test error in /usr/local/lib/php/PEAR.php on line 399
+[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" prepend="" append="" info=""] mode=trigger,level=notice:
-Notice: test error in PEAR.php on line 327
-[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" prepend="" append="" debug=""] +Notice: test error in /usr/local/lib/php/PEAR.php on line 399
+[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" prepend="" append="" info=""] mode=trigger,level=warning:
-Warning: test error in PEAR.php on line 327
-[pear_error: message="test error" code=-42 mode=trigger level=warning prefix="" prepend="" append="" debug=""] +Warning: test error in /usr/local/lib/php/PEAR.php on line 399
+[pear_error: message="test error" code=-42 mode=trigger level=warning prefix="" prepend="" append="" info=""] mode=trigger,level=error:
-Fatal error: test error in PEAR.php on line 327
+Fatal error: test error in /usr/local/lib/php/PEAR.php on line 399