PHP的异常处理机制

PHP中的异常机制是不足的,绝大多数的情况 下无法自动抛出异常。

一.区分异常和错误

PHP中什么是异常:
  程序在运行中出现不符合预期的情况,允许发生(你也不想让他出现不正常的情况)但他是一种不正常的情况,按照我们的正常逻辑本不该出的错误,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是编译或者语法上的错误。

PHP中什么是错误:
  属于php脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。warning、notice都是错误,只是他们的级别不同而已,并且错误是不能被try-catch捕获的。

 

例子:

<?php
    $num = 0;
  echo 1/$num;
    try {
        echo 1/$num;
     } catch (Exception $e){
        echo $e->getMessage();
    }
?>

 

结果:

 

事实证明,错误不能被try-catch捕获。错识是异常的前提。

 

二、自定义获取异常和错误

1:set_error_handler()

<?php
    set_error_handler('zyferror');
    $num = 0;
    echo 1/$num;
     try {
     } catch (Exception $e){
        echo $e->getMessage();
    }
 
 function zyferror($type, $message, $file, $line)
    {
    echo('<b>set_error_handler: ' . $type . ':' . $message . ' in ' . $file . ' on ' . $line . ' line .</b><br />');
    }
 
 
?>

结果:

 

2:register_shutdown_function()

使用:无法报编译的错误

<?php
   register_shutdown_function('zyfshutdownfunc');
   function zyfshutdownfunc()
    {
        if ($error = error_get_last()) {
            echo('<b>register_shutdown_function: Type:' . $error['type'] . ' Msg: ' . $error['message'] . ' in ' . $error['file'] . ' on line ' . $error['line'] . '</b>');
        }
    }
 
    $num = 0;
     #echo 1++++;
     echo 1/$num;
     try {
     } catch (Exception $e){
        echo $e->getMessage();
    }
?>

结果:

 

 

 

echo 1+++;此是由系统抛出的,该函数无法抓到编译报错。

 

3:set_exception_handler()
 设置默认的异常处理程序,用在没有用try/catch块来捕获的异常,也就是说不管你抛出的异常有没有人捕获,如果没有人捕获就会进入到该方法中,并且在回调函数调用后异常会中止。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值