• php异常处理机制


    php异常我们常接触到的就是error错误码1,warning错误码2,notice错误码8这三类。出现error了系统是挂掉了,但是warning和notice是我们可以捕捉并处理的

    php配置项
    display_errors=On On将错误显示到浏览器上,不管是On还是Off都会记录到你错误日志里面,前提是配置了错误日志log_errors和error_log

    error_reporting 设置错误报告级别,这个与display_errors和error_log有关,只会将对应的错误记录在错误日志或者打印到浏览器上


    php错误处理机制
    php本身有一套错误处理机制,就是通过display_errors error_reporting来控制
    所以默认情况下,在代码出现问题,notice warning等消息时,会直接打印到浏览器上,而且还会继续往下执行,这个时候你通过 try catch根本捕捉不到,这就和我理解的不太一样,
    因为我以为的会是错误直接被我catch捕捉到,

    所以php的try catch 能捕捉到的只能是你自己 throw new Exception("");的错误,throw之后的语句会进入到catch中继续执行。

    如果你想抛弃php自身的错误处理机制,这个时候可以通过set_error_handler这个函数,自定义一个函数用来处理,再这个函数中你可以抛出异常,然后再通过catch捕捉到异常。


    这样的意义就是,当出现notice和warning时,比如在mysql连接失败时,会出现warning,但是这个warning你又不能直接通过catch捕捉到,不考虑关闭display_errors,
    然后设置error_reporting,通过判断connect返回的句柄,来手动throw抛出异常

    set_error_handler()也不能用来处理所有的错误级别,官方手册上是这样说的:

    The following error types cannot be handled with a user defined function: 
    E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, 
    and most of E_STRICT raised in the file where set_error_handler() is called.

    最后再提供一个小技巧,对于需要使用第三方类的时候可以考虑这样子

    1.通过__call()方法,这样做的好处就是避免了,再使用没有定义的方法的时候,会报error的错误,error是会让整个系统挂掉的。

    2.第二个方面配合set_error_handler()方法设置的自定义错误处理函数,就相当于在调用函数方法的过程中就已经封装了异常处理,我们只需要判断函数处理结果是false(或者是其他的一个字符串)就好了。可以用来判断函数是否调用失败,比如connect。

    还有一点需要注意的是,php throw出来的异常,必须要catch到,不然会报错。php的异常也像JAVA的异常的一样,可以在最外层catch捕捉,也可以在throw的地方捕捉。

  • 相关阅读:
    VS2013无法启动 IIS Express Web解决办法
    浅谈Java中switch分支语句
    instanceof运算符与引用变量的强制类型转换
    Java语言中null与" "的区别
    Java字符串无意识的递归
    不同编程语言实现输出“HelloWorld!”
    用 C# 来守护 Python 进程
    Python核心技术与实战 笔记
    Python3 系列之 并行编程
    Django + Gunicorn + Nginx 部署之路
  • 原文地址:https://www.cnblogs.com/water0729/p/5802476.html
Copyright © 2020-2023  润新知