`
txf2004
  • 浏览: 6867606 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PHP5的异常处理机制[3]--PHP5之前的错误处理之trigger_error()

阅读更多

我们或许可以通过trigger_error()生成一个用户警告来代替,使程序更具有灵活性。

Index2.php

<?php
// PHP 4
require_once('cmd_php4/Command.php');
class
CommandManager {
var
$cmdDir = "cmd_php4";

function
getCommandObject($cmd) {
$path = "{$this->cmdDir}/{$cmd}.php";
if (!
file_exists($path)) {
trigger_error("Cannot find $path", E_USER_ERROR);
}
require_once
$path;

if (!
class_exists($cmd)) {
trigger_error("class $cmd does not exist", E_USER_ERROR);
}

$ret = new $cmd();
if (!
is_a($ret, 'Command')) {
trigger_error("$cmd is not a Command", E_USER_ERROR);
}
return
$ret;
}
}
?>

如果你使用trigger_error()函数来替代die(),你的代码在处理错误上会更具优势,对于客户程序员来说更易于处理错误。trigger_error()接受一个错误信息和一个常量作为参数。常量为:

常量

含义

E_USER_ERROR

A fatal error

E_USER_WARNING

A non-fatal error

E_USER_NOTICE

A report that may not represent an error

你可以设计一个错误处理器,然后再定义一个处理器选择函数set_error_handler()来使用这个错误处理器。

Index2.php 后半段

<?php
// PHP 4
function cmdErrorHandler($errnum, $errmsg, $file, $lineno) {
if(
$errnum == E_USER_ERROR) {
print
"error: $errmsg\n";
print
"file: $file\n";
print
"line: $lineno\n";
exit();
}
}

$handler = set_error_handler('cmdErrorHandler');
$mgr = new CommandManager();
$cmd = $mgr->getCommandObject('realcommand');
$cmd->execute();
?>

set_error_handler()接受一个函数名作为参数。如果触发了一个错误,参数中的这个函数会被调用来处理错误。函数需要传入四个参数:错误标志,错误信息,出错文件,出错处的行数。你也可以将一组数组传递给set_error_handler()。数组中的第一个元素必须是错误处理器将调用的对象,第二个元素是错误处理函数的名称。可以看出,我们的错误处理器相当简单简陋,还可以改进。然而尽管你可以在错误处理器添加某些功能,如记录出错信息,输出debug数据等,这仍然是一个过于粗糙的错误处理途径。你的选择仅限于已经考虑到的出错情况。例如捕捉一个E_USER_ERROR错误,如果你愿意的话可以不中止脚本的执行(不使用exit()和die()),但如果这样做的话,可能会引起一些很微妙的bug,本来应该中止的程序却继续执行了。

分享到:
评论

相关推荐

    PHP 自定义错误处理函数trigger_error()

    定义和用法trigger_error() 函数创建用户定义的错误消息。 trigger_error() 用于在用户指定的条件下触发一个错误消息。它与内建的错误处理器一同使用,也可以与由 set_error_handler() 函数创建的用户自定义函数使用...

    deprecations:围绕不同折旧策略的精简库

    默认情况下没有副作用,这使其非常适合那些不知道错误处理程序如何工作的库避免使用PSR-3日志记录而依赖于错误处理程序全局状态的选项删除重复数据删除消息,以避免过多的触发并减少开销我们建议使用PSR记录器收集...

    php中错误处理操作实例分析

    语法形式:trigger_error(“错误提示信息内容”,3种用户错误代号之一); 其中触发了用户的致命错误(E_USER_ERROR),也会终止程序的后续执行 错误显示 是否显示错误报告(display_errors) 有2种来设定是否显示: 1.在...

    弃用合同:触发弃用通知的通用功能和约定

    通过使用自定义PHP错误处理程序(例如Symfony ErrorHandler组件提供的错误处理程序),可以捕获触发的弃用记录并记录下来,以供以后在开发和生产环境中发现。 该函数至少需要3个参数: 触发弃用的Composer软件包...

    PHP-Color:一个用于处理RGB,HSL和十六进制颜色PHP 7库。 使用此独立的库,可以创建方案,修改特定的颜色属性,导出CMYK并快速轻松地提出颜色建议

    PHP颜色 这是一个PHP 7库,用于处理RGB,HSL和十六进制颜色。 使用此独立的库,可以创建方案... 所有错误都是可恢复的,并且可以使用trigger_error()将错误作为异常(默认)触发,也可以针对所有实例将其关闭。安装及使

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和...

    smarty手册.chm

    trigger_error [触发错误] template_exists [模板是否存在] unregister_block [注销一个块] unregister_compiler_function [注销编译函数] unregister_function [注销函数] unregister_modifier [注销修饰器] ...

    Smarty中文手册 chm版

    trigger_error [触发错误] template_exists [模板是否存在] unregister_block [注销一个块] unregister_compiler_function [注销编译函数] unregister_function [注销函数] unregister_modifier [注销修饰器] ...

    ExtAspNet_v2.3.2_dll

    -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和...

Global site tag (gtag.js) - Google Analytics