zoukankan      html  css  js  c++  java
  • php中的错误和异常

    总结:

      php错误不会抛出异常,因此不能被catch,但会根据配置写入日志文件或者输出到浏览器,所以可以通过日志文件查看错误

      php异常都必须自己抛出,并通过catch捕捉。SQL语句执行的错误好像可以自动抛出。

    在php中通常会在以下场景中使用异常:

    1. 对程序的悲观预测:如果认为自己的代码无法一一处理各种可预见的情况、不可预见的情况。

    2. 程序的需要和对业务的关注 : 如果对数据的一致性要求很高时,可以用try...catch把异常造成的逻辑中断破坏将到最小,并且经过补救处理后,不影响业务逻辑的完整性。

    3. 语言级别的健壮性要求 : 通过精确控制运行时的流程,在程序中断时,有预见的用try...catch缩小可能出错的范围,及时捕获异常并做出相应的补救。

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

      在 PHP语言里,所有异常都必须自己抛出,而不像 JAVA 之类的语言会自动抛出异常,这也正是 PHP源代码里很少看到异常处理语句的原因之一。

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

    PHP的错误报告有三种:

    1.错误,语法解析错误,致命错误
    2.警告
    3.注意

    错误 -> 致命错误,会终止已下程序的执行,语法错误的话,PHP压根就没执行
    警告 -> 他不会终止运行,但会影响结果
    注意 -> 不会终止执行,也不会影响结果

    在PHP中错误,并不会以异常的形式抛出所以不能被try-catch捕获,但是也有一些情况会当做异常和错误同时抛出(据说是,我没有找到合适的例子)。

    也就是说,你想在数据库连接失败的时候自动捕获异常是行不通的,因为这就不是异常,是错误。(SQL语句的错误可以被抛出并被捕获)

    把错误以异常的形式抛出(不能完全抛出)
      php中的错误是不能以异常的像是捕获的,但是我们需要让他们抛出,已达到扩展 try-catch的影响范围。

      set_error_handler() 方法,他是捕获错误的,所以我们就可以借助他来吧错误捕获,然后再以异常的形式抛出。

      这样做是有缺点的,会受到set_error_handler()函数捕获级别的限制。他能够捕获一部分错误,不能捕获系统级E_ERROR、E_PARSE等错误。

      所以,在php中最好不要简单的在可能出错的地方直接抛出异常,在一些框架中,重写了上述的方法,异常和错误可以正常抛出

     1 <?php
     2     set_error_handler('error');
     3     function error($type, $message, $file, $line)
     4     {
     5         throw new Exception($message . '错误当做异常');
     6     }
     7 
     8     $num = 0;
     9     try {
    10         echo 1/$num;
    11 
    12     } catch (Exception $e){
    13         echo $e->getMessage();
    14     }
    15 ?>
    

      

  • 相关阅读:
    应对IBM V7000磁盘故障,你只差这一步!
    鬼知道我经历了什么;记阵列RAID信息丢失的恢复过程
    遇到U盘无法打开,属性显示0字节这样的问题?数据该如何导出?
    2、【Linux网络编程】socket中sockaddr、sockaddr_in和in_addr的区别
    1、【Linux网络编程】socket
    9、wxWidgets 组件wxListBox wxNotebook wxScrolledWindow
    8、wxWidgets 组件wxCheckBox wxBitmapButton wxToggleButton wxStaticLine wxStaticText wxSlider
    7、wxWidgets 对话框
    6、wxWidgets 事件处理
    5、wxWidgets布局管理
  • 原文地址:https://www.cnblogs.com/gaoBlog/p/10097788.html
Copyright © 2011-2022 走看看