关于php的错误和异常处理的使用最近终于搞清楚了,下面是简要笔记:
0、程序处理的原则:
0、首先是中断,即粗暴的停止程序,并且不提供错误信息,在php中就是die()和exit(),只是简单的输出一条消息,比粗暴中断有了一定进步;
1、然后是错误处理,就是在中断基础上增加关于错误的信息,以便调试,就是php中默认的错误处理方式(缺点见下);
2、为了弥补缺点,php允许程序员自定义错误处理函数;
1、php自身的错误处理方式对于web用户是不友好的(warning级别的错误不影响后续的程序运行,而error和notice级别的错误会终止程序的运行),而且会暴露程序的一些信息。所以真正的php程序是屏蔽所有报错信息,并自定义自己的处理函数。
2、这个自定义函数形如:handler(int $errno,string $errstr [,string $errfile [,int $errline [,array $errcontext ]]]),并且需要通过set_error_handler进行调用。handler函数的参数是由php内部传入的,就是原本传给内部错误处理函数的参数。
3、注意set_error_handler函数可以多次使用,会覆盖上一次的错误处理函数,可以使用restore_error_handler函数重新指向上一个错误处理函数
4、对应的还有set_exception_handler和restore_exception_handler函数,区别是这两个函数是用来处理异常的。异常是php5中定义的,和其他语言try,catch,finally,throw结构相似。throw用于抛出异常,try用于检测一段代码并能够检测到异常,然后由catch结构进行处理。而这两个函数是用于处理未被try检测部分代码的异常信息。
那php异常和错误有何区别那?
php的异常是在php5版本中出现的,基础是Exception(所有异常基类)和ErrorException两个类。
下面解释了为何需要异常处理机制:
当函数遇到return时会结束运行并返回,且返回值只有一个,可以据此来做判断
但当new一个新对象时,即使类内某一部分出错,同样会继续运行并返回一个完整的对象(就像汽车即使漏油也是汽车,出错不能发现)
所以为了查看对象形成过程中是否出错需要异常处理机制
!!!异常处理机制通常用于处理类中的错误,但是也可以处理函数中的错误
那么在实际的php项目中,是怎样工作的呢?
1、设置报错级别为0,即不对用户报错
2、设置调试标识,开发过程中对程序员显示错误信息以便调试;对用户则显示错误页面即可
3、有关错误信息的设置是三个函数的组合:
register_shutdown_function();
set_error_handler();
set_exception_handler();
参考:http://bbs.phpchina.com/thread-212378-1-1.html