加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

直击PHP的异常和错误解决

发布时间:2022-07-29 14:14:33 所属栏目:PHP教程 来源:互联网
导读:异常和错误 $num = 0; try { echo 1/$num; } catch (Exception $e){ echo $e-getMessage();//并不能执行到这里 } //说明try{}catch{}是用于捕获异常的,而错误是不能捕获到的。 //手动抛出异常进行捕获 $num = 0; try { if($num == 0){ //通过if判断可以处理
  异常和错误
 
 
 
  $num = 0;
 
    try {
 
        echo 1/$num;
 
    } catch (Exception $e){
 
        echo $e->getMessage();//并不能执行到这里
 
    }
 
    //说明try{}catch{}是用于捕获异常的,而错误是不能捕获到的。
 
   
 
    //手动抛出异常进行捕获
 
    $num = 0;
 
    try {
 
        if($num == 0){
 
            //通过if判断可以处理错误,手动抛出异常(如何实现自动捕获错误呢,需结合三个php内置函数)
 
            throw new Exception('除数为零');
 
        }
 
        echo 1/$num;
 
    } catch (Exception $e){
 
        echo $e->getMessage();
 
    }
 
  什么是异常
 
  程序在运行中出现不符合预期的情况,允许发生(你也不想让他出现不正常的情况)但他是一种不正常的情况,按照我们的正常逻辑本不该出的错误,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是编译或者语法上的错误。
 
  什么是错误
 
  属于 php 脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。warning、notice 都是错误,只是他们的级别不同而已,并且错误是不能被 try-catch 捕获的
 
  错误的分类
 
  Fatal Error: 致命错误(脚本终止运行)
 
  E_ERROR // 致命的运行错误,错误无法恢复,暂停执行脚本
 
  E_CORE_ERROR // PHP 启动时初始化过程中的致命错误
 
  E_COMPILE_ERROR // 编译时致命性错,就像由 Zend 脚本引擎生成了一个 E_ERROR
 
  E_USER_ERROR // 自定义错误消息。像用 PHP 函数 trigger_error(错误类型设置为:E_USER_ERROR)
 
  Parse Error:编译时解析错误,语法错误(脚本终止运行)
 
  E_PARSE // 编译时的语法解析错误
 
  Warning Error:警告错误(仅给出提示信息,脚本不终止运行)
 
  Notice Error:通知错误(仅给出通知信息,脚本不终止运行)
 
  E_NOTICE // 运行时通知。表示脚本遇到可能会表现为错误的情况.
 
  E_USER_NOTICE // 用户产生的通知信息。
 
  5 类是产生 ERROR 级别的错误,这种错误直接导致 PHP 程序退出。分别是 ERROR = E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_PARSE
 
  如何实现捕获错误
 
  实现用 try {} catch (Exception $e){} 捕获异常的方式,来捕获错误,需借助三个函数
 
 
  // 注册一个会在php中止时执行的函数
 
      register_shutdown_function('myShutdownFunction');
 
      function myShutdownFunction()
 
      {
 
          if ($error = error_get_last()) {
 
              var_dump('<b>register_shutdown_function: Type:' . $error['type'] . ' Msg: ' . $error['message'] . ' in ' . $error['file'] . ' on line ' . $error['line'] . '</b>');
 
          }
 
      }
 
 
  //注册错误处理函数
 
     set_error_handler('myError');
 
     function myError($type, $message, $file, $line)
 
 
  捕获所有错误的原理
 
  由 set_error_handler () 可知,他能够捕获一部分错误,不能捕获系统级 E_ERROR、E_PARSE 等错误,但是这部分可以由 register_shutdown_function () 捕获。所以两者结合能出现很好的功能。
 
  小结
 
  三个函数实现自动捕获异常和错误
 
  set_error_handler () 只能够捕获部分错误
 
  register_shutdown_function () 结合 set_error_handler () 函数,能捕获所有错误
 
  set_exception_handler () 用于捕获异常
 
  error_get_last () 最后终止错误信息
 
  在捕获错误的函数中,再手动抛出异常,即实现 set_exception_handler 能够捕获错误。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读