简单的说说php异常

php异常

php的异常处理是一个争议较大的功能,有的人觉得php的异常是一个很鸡肋的存在,而大多数的代码功能实现,都用到了异常,所以,本人根据自己一年多的代码经验,说说自己的理解吧

什么是异常?

现在网上,应该有很多关于异常的解释,我就随便复制一段吧:


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


可能这句话有点绕,通俗点解释就是:"知道可能会出现错误的情况,就叫异常"


比如$num_1/$num_2,当num_2是0是会出错,而你知道可能会出现这个错误,那就叫异常


比如getinfo($phone),$phone为空时可能查不出数据,而你知道可能有这个情况,这就叫异常


异常的处理

在php中,需要使用Try, throw 和 catch 3个语句去进行尝试,抛出异常 和捕获异常,例如:

<?php

$num_1=1;
$num_2=0;

try{
    if((int)$num_2==0){
        throw new Exception('num_2不能为0!');
    }
    echo (int)$num_1/(int)$num_2;



}catch (\Exception $exception) {
    var_dump($exception->getMessage());
}

注意:当一个异常抛出,没有进行相应的处理(没有try catch对应的异常类,没有使用set_exception_handler函数进行拦截)

将会报出一个致命错误


php的异常能捕获错误吗?

首先,先搞清楚异常的定义(上文),而错误,并不是已知的,并不属于异常

在php7版本以下,任何php产生的错误,都不是异常.而在php7之后,错误可以使用捕获异常处理的方法进行捕获

再然后,可以使用php的register_shutdown_function,set_error_handler,set_exception_handler进行变相的捕获错误


应用场景:

在层级较深的框架,业务逻辑中,是有很大的必要使用异常的

数据库事务处理时可使用异常

业务逻辑判断返回层级较高时(比如你调用a,a调用b,b调用c,c需要报一个错误,如果直接一层一层返回上去,太难看了),也可以使用异常


总结:

php异常应用场景很多,并且都是可用的场景,根据定义,可知道,异常本身就是已知的错误,本身就是需要if  else判断进行抛出的,

当有人说php异常是鸡肋的,不能自动捕获异常,不能直接捕获错误时,我笑的我八块腹肌都出来了

所以不存在鸡肋一说,鸡肋,只能说明你用错了地方.异常本身的定义,应用场景都没搞懂,谈什么鸡肋



仙士可博客
请先登录后发表评论
  • 最新评论
  • 总共21条评论
仙士可博客

乔永刚:test

2018-09-25 15:02:34 回复

仙士可博客

冯海诗:八块腹肌呢

2018-09-12 13:25:41 回复

仙士可博客

乔永刚:test

2018-09-10 13:50:11 回复

仙士可博客

乔永刚:test

2018-09-10 10:53:00 回复

仙士可博客

乔永刚:test

2018-09-10 10:52:53 回复

仙士可博客

乔永刚:test

2018-08-31 17:51:05 回复

仙士可博客

乔永刚:test

2018-08-31 17:34:08 回复

仙士可博客

乔永刚:test

2018-08-31 17:33:57 回复

仙士可博客

乔永刚:test

2018-08-31 17:26:01 回复

仙士可博客

你的小傻瓜:这篇文章写的太好了

2018-08-31 16:58:19 回复

仙士可博客

乔永刚:这篇文章写的太好了

2018-08-31 16:58:17 回复

仙士可博客

你的小傻瓜:这篇文章写的太好了

2018-08-31 16:57:51 回复

仙士可博客

乔永刚:这篇文章写的太好了

2018-08-31 16:57:36 回复

仙士可博客

你的小傻瓜:恩恩

2018-08-31 16:54:32 回复

仙士可博客

乔永刚:1212

2018-08-31 16:53:02 回复

仙士可博客

乔永刚:这篇文章写的太好了

2018-08-31 16:51:56 回复

仙士可博客

乔永刚:这篇文章写的太好了

2018-08-31 16:50:00 回复

仙士可博客

乔永刚:test

2018-08-31 16:49:38 回复

仙士可博客

乔永刚:test

2018-08-31 16:47:22 回复

仙士可博客

乔永刚:121212

2018-08-31 16:46:09 回复

仙士可博客

乔永刚:1212

2018-08-31 16:45:44 回复

  • 本站由白俊遥博客程序搭建
    © 2017-1-17 php20.cn 版权所有 ICP证:闽ICP备17001387号
  • 联系邮箱:1067197739@qq.com