博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP错误和异常
阅读量:5898 次
发布时间:2019-06-19

本文共 1637 字,大约阅读时间需要 5 分钟。

目录

  • 错误和异常概念
  • 异常
    • 异常类
    • 抛出
    • 捕捉
    • 使用原则
    • 全局设置
  • 错误

错误和异常

程序免不了出错

之前呢php是报错,你可以设置报错级别,设置错误处理函数

现在呢,沿着oop的思路,用异常来替代错误,异常是比错误更加科学和强大的一种处理代码运行错误的一种机制,我们应该用异常。

但是呢,错误并没有完全消失匿迹,我们自己写的代码固然可以用异常,php也在过渡到异常,但是一些老的函数运行出错还是会有报错,大概就是这样的情况。

异常

异常是随着oop编程而出现的,非常适合oop编程里使用,看代码

eat(['shit']);}catch(\Exception $e){ echo $e->getMessage();}finally{ echo 'we got a exception';}//结果是'argument must be a string'复制代码

异常的使用步骤有 1.抛出异常 2.try catch 捕捉异常和处理异常

抛出异常

抛出异常是一个神奇的操作,用throw,会被外层的catch捕捉。 抛出异常后,代码就不执行下去了。

捕捉异常

try代码块内有抛出异常的话,就会运行catch代码块。

异常类

Exception类是一个预定义类,抛出异常必须是Exception的实例,接受3个参数,Exception类有好几个方法,常用的有getMessage()和getCode()

异常机制的使用

单一职责的类,将超出处理范围的错误抛出

在面向对象编程中,一个类往往专注于一个功能,当出现这个类处理不了的错误时,我们要自觉选择抛出异常,交给上级去处理

调用类时,要设置try catch

我们在调用没底的类进行使用时,要注意放进try代码块,来做好错误处理

扩展Exception

我们还可以继承Exception编写自己的异常子类,来抛出自己的异常类,catch可以写好几个,这样可以通过类名就知道是什么类型的错误,更加细致得处理不同的异常

finally

在catch后面接finally,finally里面的代码怎样都会运行一遍

全局异常处理

我们不可能把所有的代码都放在try代码块,万一有漏网之鱼的异常,就惨了,怎么办? 我们可以设置一个全局的处理函数作为后备,当没有代码能catch异常时,交给这个函数处理。

这个设置方法就是这样

set_exception_handler(function(\Exception $e){    echo 'haha,sth is wrong,but i wont tell you the detail,you can go and check log file';});throw new \Exception();复制代码

错误

错误时完全不一样的机制,他没有太细致的处理选项,比异常有多一个预定的错误等级。

全局错误处理程序

跟异常一样,我们也可以设置一个函数用于处理所有没有被处理的错误。

set_error_handler(function($errno,$errstr,$errfile,$errline){    echo 'haha,sth is wrong,but i wont tell you the detail,you can go and check log file';});trigger_error();复制代码

我们可以巧妙得把错误转发成一个异常,这样并入异常处理机制统一处理

set_error_handler(function($errno,$errstr,$errfile,$errline){    throw new \Exception($errstr,$errno); });trigger_error();复制代码

参考文章

转载于:https://juejin.im/post/5c861ac7f265da2d9e178cd4

你可能感兴趣的文章
LeetCode算法题-Maximum Depth of Binary Tree
查看>>
sha1withRSA算法
查看>>
让简历一发即中三大绝招
查看>>
Vim和操作系统剪贴板交互
查看>>
使用ExposedObject对Asp.net MVC中匿名类型的JsonResult做单元测试
查看>>
ajax省市县联动
查看>>
Cox 教学视频5
查看>>
014-请问你觉得测试项目具体工作是什么?
查看>>
JVM类加载(4)—加载器
查看>>
public/private/protected的具体区别
查看>>
面试宝典——求一个字符串中连续出现次数最多的子串
查看>>
VMware Workstation虚拟机上网设置
查看>>
Jenkins持续集成学习-搭建jenkins问题汇总
查看>>
leetcode:Invert Binary Tree
查看>>
C#Note13:如何在C#中调用python
查看>>
Android介绍以及源码编译---Android源码下载
查看>>
SpringBoot集成redis缓存
查看>>
万恶的浏览器兼容问题
查看>>
sql经典语句
查看>>
使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)
查看>>