资讯专栏INFORMATION COLUMN

php异常处理的深入

shadowbook / 572人阅读

摘要:当项目抛出异常时操作那个方法时传的参数执行操作异常相关操作当前异常类通过异常类名,我们可以知道是订单支付异常。

引出

如果你调一个类,调用时数据验证时报了个错,你会以什么方式返回

数组,布尔值?

数组这个可以带错误原因回来,那布尔值呢?

返回了个 false, 报错时把错误放在类变量里?
还是专门用一个获取错误的方法进行获取?

上面说的情况是代码完全没有问题的情况。
那如果是一些第三方的工具包,你又怎么知道他里面的执行会不会导致整个系统崩溃。

你说本地运行是没问题的,环境这种东西不好说。

所以我们就用到了 异常 这个东西

下面是我们需要了解的问题

什么时候抛异常?怎么接异常?异常要怎么处理?他的使用场景又是什么?

基础知识

基础操作

try ... catch()
throw

错误级别

致命错误 E_ERROR,
语法错误 E_PARSE,
警告错误 E_WARNING,
通知错误 E_NOTICE

php异常处理类

预定义异常

    * ErrorException (extends Exception)

SPL异常类

    * LogicException (extends Exception)      // 表示程序逻辑中的错误的异常。这种异常应该直接在代码中的修复
        * BadFunctionCallException            // 回调调用未定义的函数或缺少一些参数时会抛出该异常
            * BadMethodCallException          // 回调方法是一个未定义的方法或缺失一些参数时会抛出该异常
        * DomainException                     // 值不遵守定义的有效数据域时会抛出该异常
        * InvalidArgumentException            // 参数不是预期类型时会抛出该异常
        * LengthException                     // 长度无效时会抛出该异常
        * OutOfRangeException                 // 请求非法索引时引发的异常,这应该在编译时就检测到的错误

    * RuntimeException (extends Exception)    // 在运行时发生的错误会抛出该异常
        * OutOfBoundsException                // 值不是有效键时会抛出该异常,这表示在编译时无法检测到的错误
        * OverflowException                   // 在向完整容器中添加元素时引发的异常
        * RangeException                      // 在程序执行期间为指示范围错误而引发的异常。通常这意味着除了/overflow以外还有一个算术错误。这是运行时的DomainException版本
        * UnderflowException                  // 在空容器上执行无效操作(如删除元素)时引发的异常
        * UnexpectedValueException            // 值与一组值不匹配时会抛出该异常。通常,当一个函数调用另一个函数并期望返回值为某种类型或值(不包括算术或缓冲区相关错误)时,就会发生这种情况

异常处理相关函数

    error_reporting // 设置报告的错误级别
    register_shutdown_function // 注册一个会在php中止时执行的函数
    set_error_handler // 设置用户自定义的错误处理函数
    set_exception_handler // 设置用户自定义的异常处理函数
    error_get_last // 获取最后发生的错误
使用场景

系统

主要抓的是无法预测的错误,统一返回,没有使用 try...catch 接收的异常直接跳进设置的方法中



工具

定义自定义的异常,一有错误直接抛出。使用工具的程序只需通过 Exception 接收异常即可, 所有异常都通过这个进行处理的



db = new PDO($config);

        if ($this->db == false) {
            throw new Pdo("连接失败");
        }
    }
}

?>
文章例子

工具包例子

项目例子

FQA

1、为什么要定自定义异常类, 系统不是已经给了很多选择,而且很多 composer 包里都只是继承一下。

答:其实自定义异常是为了用区分异常颗粒度的,比如

我定了 订单异常,商品异常,用户异常 类,但是 订单里的异常多种多样,比如订单支付异常,订单生成异常。

* RuntimeException (extends Exception)
    * Order
        * Paymen
        * Created
    * Goods
    * User
        * Withdraw

当项目抛出异常时


通过异常类名,我们可以知道是订单支付异常。这里可以代替错误号,而且更清晰明了

2、为什么有一些 composer 包里的自定义异常,有的有很多方法。有什么用处吗?

作用1:格式化异常

比如:抛出的异常提示是 "id=xx 的用户不存在",我们会有以下两种写法


作用2:组件级别的异常

           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29583.html

相关文章

  • 深入理解PHP异常和错误处理(6)PHP如何优雅处理错误

    摘要:好了,终于写完了深入理解异常和错误处理这个系列了,可能大家平时使用框架开发,基本上不用考虑错误和异常,阅读,评论转发数量不尽人意,也可能自己水平有限本文由甲爪广告联盟整理编辑 前言:有错就改,错误光屏蔽是不行的,还需要对错误进行处理和记录。 内容概要: 1、顶层错误处理器的介绍2、示例代码 一、顶层错误处理器的介绍 php在处理错误的时候,可以简单的使用exit()和die()来进行基...

    Alliot 评论0 收藏0
  • PHP 7 值得期待新特性(下)

    摘要:在本系列的第一篇我们介绍了中最重要的一些不兼容性修复以及两大新特性。例如这个绿色的心形,,可以表示为字符串。虽然现在它只具备内部测试品质目前已可以下载,但的确让人期待。向项目报告错误,并定期重试。 这是我们期待已久的 PHP 7 系列文章的第二篇。点此阅读 第一篇本文系 OneAPM 工程师编译整理。 也许你已经知道,重头戏 PHP 7 的发布将在今年到来!现在,让我们来了解一下,新版...

    BetaRabbit 评论0 收藏0
  • 深入剖析 Web 服务器与 PHP 应用之间通信机制 - 掌握 CGI 和 FastCGI 协议

    摘要:深入协议从功能上来讲,协议已经完全能够解决服务器与应用之间的数据通信问题。消息头信息主要的消息头信息如下用于表示协议版本号。从服务器发送到应用,表示中止一个处理中的请求。另外我们还需要明确一点就是服务器与进程间通信是无序的。 本文首发于 深入剖析 Web 服务器与 PHP 应用之间的通信机制 - 掌握 CGI 和 FastCGI 协议的运行原理,转载请注明出处! 身为一名使用 PHP ...

    mumumu 评论0 收藏0
  • PHP小知识点

    摘要:那些琐碎的知识点作者记录的的很奇特很难记的知识点。易错知识点整理注意和的区别中和都是输出的作用,但是两者之间还是有细微的差别。今天手头不忙,总结一下,分享过程中掌握的知识点。 深入理解 PHP 之:Nginx 与 FPM 的工作机制 这篇文章从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理,让我们真正理解 Nginx 与 PHP 是如何协同工作的。 PHP 那些琐碎的知识...

    hover_lew 评论0 收藏0
  • PHP知识难点TOP3,挑战一下你

    摘要:虽然容易入门,但是要想深入,还是有些路要走的,今天我们就来聊聊一些比较难理解的知识点。至于的第三种用法请看下面的。如果大家觉得这篇文章还不错,请给予一个赞或者分享给你的好友,如果你有更多好的经验或问题,请在评论中和大家分享一下。 php虽然容易入门,但是要想深入,还是有些路要走的,今天我们就来聊聊php一些比较难理解的知识点。use php从5.3.0开始引入了一个叫作命名空间的新特征...

    mdluo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<