// $Id$
//
-define('PEAR_ERROR_RETURN', 0);
-define('PEAR_ERROR_PRINT', 1);
-define('PEAR_ERROR_TRIGGER', 2);
-define('PEAR_ERROR_DIE', 3);
-define('PEAR_ERROR_CALLBACK', 4);
+define('PEAR_ERROR_RETURN', 1);
+define('PEAR_ERROR_PRINT', 2);
+define('PEAR_ERROR_TRIGGER', 4);
+define('PEAR_ERROR_DIE', 8);
+define('PEAR_ERROR_CALLBACK', 16);
define('PHP_BINDIR', '@prefix@/bin');
define('PEAR_INSTALL_DIR', '@PEAR_INSTALLDIR@');
*/
function PEAR_Error($message = 'unknown error',
$code = 0,
- $mode = PEAR_ERROR_RETURN,
- $level = E_USER_NOTICE)
+ $mode = null,
+ $options = null)
{
+ if ($mode === null) {
+ $mode = PEAR_ERROR_RETURN;
+ }
$this->message = $message;
$this->code = $code;
$this->mode = $mode;
- if ($mode == PEAR_ERROR_CALLBACK) {
+ if ($mode & PEAR_ERROR_CALLBACK) {
$this->level = E_USER_NOTICE;
- $this->callback = $level;
+ $this->callback = $options;
} else {
- $this->level = $level;
- $this->callback = false;
+ if ($options === null) {
+ $options = E_USER_NOTICE;
+ }
+ $this->level = $options;
+ $this->callback = null;
+ }
+ if ($this->mode & PEAR_ERROR_PRINT) {
+ print $this->getMessage();
+ }
+ if ($this->mode & PEAR_ERROR_TRIGGER) {
+ trigger_error($this->getMessage(), $this->level);
}
- switch ($this->mode) {
- case PEAR_ERROR_PRINT:
- print $this->getMessage();
- break;
- case PEAR_ERROR_TRIGGER:
- trigger_error($this->getMessage(), $this->level);
- break;
- case PEAR_ERROR_DIE:
- die($this->getMessage());
- break;
- case PEAR_ERROR_CALLBACK:
- if (is_string($this->callback) && strlen($this->callback)) {
- call_user_func($this->callback, $this);
- } elseif (is_array($this->callback) &&
- sizeof($this->callback) == 2 &&
- is_object($this->callback[0]) &&
- is_string($this->callback[1]) &&
- strlen($this->callback[1])) {
- call_user_method($this->callback[1], $this->callback[0],
- $this);
- }
- break;
- case PEAR_ERROR_RETURN:
- default:
- break;
+ if ($this->mode & PEAR_ERROR_DIE) {
+ die($this->getMessage());
+ }
+ if ($this->mode & PEAR_ERROR_CALLBACK) {
+ if (is_string($this->callback) && strlen($this->callback)) {
+ call_user_func($this->callback, $this);
+ } elseif (is_array($this->callback) &&
+ sizeof($this->callback) == 2 &&
+ is_object($this->callback[0]) &&
+ is_string($this->callback[1]) &&
+ strlen($this->callback[1])) {
+ call_user_method($this->callback[1], $this->callback[0],
+ $this);
+ }
}
}
* @return string a string with an object "summary"
*/
function toString() {
- $modes = array(PEAR_ERROR_RETURN => "return",
- PEAR_ERROR_PRINT => "print",
- PEAR_ERROR_TRIGGER => "trigger",
- PEAR_ERROR_DIE => "die",
- PEAR_ERROR_CALLBACK => "callback");
+ $modes = array();
$levels = array(E_USER_NOTICE => "notice",
E_USER_WARNING => "warning",
E_USER_ERROR => "error");
- return sprintf("[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" prepend=\"%s\" append=\"%s\"]",
+ if ($this->mode & PEAR_ERROR_CALLBACK) {
+ if (is_array($this->callback)) {
+ $callback = get_class($this->callback[0]) . "::" .
+ $this->callback[1];
+ } else {
+ $callback = $this->callback;
+ }
+ return sprintf('[%s: message="%s" code=%d mode=callback '.
+ 'callback=%s prefix="%s" prepend="%s" append="%s"]',
+ get_class($this), $this->message, $this->code,
+ $callback, $this->error_message_prefix,
+ $this->error_prepend, $this->error_append);
+ }
+ if ($this->mode & PEAR_ERROR_CALLBACK) {
+ $modes[] = "callback";
+ }
+ if ($this->mode & PEAR_ERROR_PRINT) {
+ $modes[] = "print";
+ }
+ if ($this->mode & PEAR_ERROR_TRIGGER) {
+ $modes[] = "trigger";
+ }
+ if ($this->mode & PEAR_ERROR_DIE) {
+ $modes[] = "die";
+ }
+ if ($this->mode & PEAR_ERROR_RETURN) {
+ $modes[] = "return";
+ }
+ return sprintf('[%s: message="%s" code=%d mode=%s level=%s prefix="%s" prepend="%s" append="%s"]',
get_class($this), $this->message, $this->code,
- $modes[$this->mode], $levels[$this->level],
- $this->error_message_prefix, $this->error_prepend,
- $this->error_append);
+ implode("|", $modes), $levels[$this->level],
+ $this->error_message_prefix,
+ $this->error_prepend, $this->error_append);
}
// }}}
error_reporting(4095);
+function errorhandler(&$obj) {
+ print "errorhandler function called, obj=".$obj->toString()."\n";
+}
+
+class errorclass {
+ function errorhandler(&$obj) {
+ print "errorhandler method called, obj=".$obj->toString()."\n";
+ }
+}
+
+$eo = new errorclass;
+
print "default PEAR_Error: ";
$err = new PEAR_Error;
print $err->toString() . "\n";
var_dump(PEAR::isError($str));
print "Now trying a bunch of variations...\n";
+
print "different message: ";
$err = new PEAR_Error("test error");
print $err->toString() . "\n";
+
print "different message,code: ";
$err = new PEAR_Error("test error", -42);
print $err->toString() . "\n";
+
print "mode=print: ";
$err = new PEAR_Error("test error", -42, PEAR_ERROR_PRINT);
print $err->toString() . "\n";
+
+print "mode=callback(function): ";
+$err = new PEAR_Error("test error", -42, PEAR_ERROR_CALLBACK, "errorhandler");
+
+print "mode=callback(method): ";
+$err = new PEAR_Error("test error", -42, PEAR_ERROR_CALLBACK,
+ array(&$eo, "errorhandler"));
+
+print "mode=print&trigger: ";
+$err = new PEAR_Error("test error", -42, PEAR_ERROR_PRINT|PEAR_ERROR_TRIGGER);
+print $err->toString() . "\n";
+
print "mode=trigger: ";
$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER);
print $err->toString() . "\n";
+
print "mode=trigger,level=notice: ";
$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER, E_USER_NOTICE);
print $err->toString() . "\n";
+
print "mode=trigger,level=warning: ";
$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER, E_USER_WARNING);
print $err->toString() . "\n";
+
print "mode=trigger,level=error: ";
$err = new PEAR_Error("test error", -42, PEAR_ERROR_TRIGGER, E_USER_ERROR);
print $err->toString() . "\n";
different message: [pear_error: message="test error" code=0 mode=return level=notice prefix="" prepend="" append=""]
different message,code: [pear_error: message="test error" code=-42 mode=return level=notice prefix="" prepend="" append=""]
mode=print: test error[pear_error: message="test error" code=-42 mode=print level=notice prefix="" prepend="" append=""]
+mode=callback(function): errorhandler function called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorhandler prefix="" prepend="" append=""]
+mode=callback(method): errorhandler method called, obj=[pear_error: message="test error" code=-42 mode=callback callback=errorclass::errorhandler prefix="" prepend="" append=""]
+mode=print&trigger: test error<br>
+<b>Notice</b>: test error in <b>PEAR.php</b> on line <b>203</b><br>
+[pear_error: message="test error" code=-42 mode=print|trigger level=notice prefix="" prepend="" append=""]
mode=trigger: <br>
-<b>Notice</b>: test error in <b>PEAR.php</b> on line <b>198</b><br>
+<b>Notice</b>: test error in <b>PEAR.php</b> on line <b>203</b><br>
[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" prepend="" append=""]
mode=trigger,level=notice: <br>
-<b>Notice</b>: test error in <b>PEAR.php</b> on line <b>198</b><br>
+<b>Notice</b>: test error in <b>PEAR.php</b> on line <b>203</b><br>
[pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" prepend="" append=""]
mode=trigger,level=warning: <br>
-<b>Warning</b>: test error in <b>PEAR.php</b> on line <b>198</b><br>
+<b>Warning</b>: test error in <b>PEAR.php</b> on line <b>203</b><br>
[pear_error: message="test error" code=-42 mode=trigger level=warning prefix="" prepend="" append=""]
mode=trigger,level=error: <br>
-<b>Fatal error</b>: test error in <b>PEAR.php</b> on line <b>198</b><br>
+<b>Fatal error</b>: test error in <b>PEAR.php</b> on line <b>203</b><br>