PHP中错误和异常的区别有哪些

技术PHP中错误和异常的区别有哪些这篇文章将为大家详细讲解有关PHP中错误和异常的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP中错误和异常的区别通过前面两篇文章的学习

本文将详细解释PHP中错误和异常之间的区别。边肖觉得挺实用的,分享给大家参考。希望你看完这篇文章能有所收获。

00-1010通过对前两篇文章的学习,让我们直接比较错误和异常,看看它们的区别和联系:

的错误通常是语法或编译运行时错误,我们应该避免。异常一般与业务逻辑有关,基本上是人为抛出的。需要上层来处理错误。通知类和警告类不会中断程序运行,严重的错误会使程序立即停止运行。已停止的程序没有其他方法来保持其运行。尝试可以捕捉异常.catch,捕获的异常可以继续运行。未捕获的异常会直接导致程序停止运行。错误的提示与php.ini中的配置有关尽量不要在线显示错误。尽量不要把错误带到线上。日志中记录在线错误,尽可能打开开发的错误显示,方便开发人员及时调试。00-1010 PHP 7重新定义了一些错误处理方法,这样就可以捕捉到大部分错误。此外,添加了一个可抛出的接口,可以捕获大多数错误和所有异常。

也就是说,许多错误可以通过尝试来捕捉.接住。抓不到的基本上是警告类的错误,可以通过set_exception_handler()注册。

Error类不继承Exception类,所以如果想全局捕获,最好使用Throwable来捕获。错误和异常都实现了这个接口。

尝试{

test();

}捕获(可投掷的$ e){ 0

print _ r($ e);

}

Echo '没有定义test()',PHP _ EOL

尝试{

new PdO();

} catch(ArgumentCountError $ e){ 0

print _ r($ e);

}

Echo '无PDO参数',PHP _ EOL

functiontest1():int{

返回“test”;

}

尝试{

test 1();

} catch(TypeError $ e){ 0

print _ r($ e);

}

Echo '返回值类型不正确',PHP _ EOL

在上面的例子中,我们捕捉到了在PHP5中被定义为错误的异常。如果尝试.catch不用于捕获,它们在PHP7中仍将被视为错误。让我们看看Throwable下新添加的错误异常处理类。

可投掷的

errorumentcountererrorparserrordivision by zero errorriteticer errorsassertioner ErrorCompileErrorException.此外,我们可以通过全局注册来全局处理异常,这就是上面提到的set_exception_handler()方法。注意,在使用这个全局注册异常处理之后,异常背后的代码将不会被执行。这相当于截断,在这种情况下只能记录一个异常日志。

set_exception_handler(函数($ ex){ 0

echo'set_exception_handler:',PHP _ EOL

print _ r($ ex);

});

test();

回声' NotExecute.//不会输出。

对于像除以0这样的错误,经过测试,发现无法捕捉到DivisionByZeroError类。如果我们想捕获这样的错误,我们可以使用set_error_handler()来获取异常,然后抛出错误。

set_error_handler(函数($errno,$ errmsg){ 0

if($ errmsg==' divinonbyzero '){ 0

thrownew divisionionbyserror();

}else{

thrownewError($errmsg,$ errno 10000);

}

});

尝试{

100/0;//distinctionbyserror:distinctionbyserror对象

//echo $ f;//错误:代码=10008

} catch(distinctionbyserror $ e){ 0

echo 'DivisionByZeroError

print _ r($ e);

}捕获(错误$ e){ 0

回声“错误”;

print _ r($ e);

}

通过set_error_handler()抛出异常,我们可以捕获这些警告类型的错误,无论是警告还是注意。您可以切换注释,分别查看被0除错误和未定义变量错误引发的异常。但是,正如我们一直强调的,这种错误是可以直接避免的。通过判断之前的除数,可以直接抛出异常或者返回错误消息。不要让PHP报告错误。

我希望这篇关于“PHP中错误和异常的区别是什么”的文章能在这里分享。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/105133.html

(0)

相关推荐

  • 烤肉食材有哪些,牛肉食材性情介绍有哪些

    技术烤肉食材有哪些,牛肉食材性情介绍有哪些牛肉是中国人的第二大类肉食品烤肉食材有哪些,仅次于猪肉。牛肉的特点是含蛋白质特别多,达到20%左右,比猪肉要 多3.3%,比羊肉要多10%。每100g黄牛肉中约含蛋白质 19.9

    生活 2021年10月26日
  • 哈利波特一共几部,《哈利波特》电影版共出过几部

    技术哈利波特一共几部,《哈利波特》电影版共出过几部一共七部,顺序如下:1哈利波特一共几部、哈利·波特与魔法石(Harry Potter and the Sorcerers Stone)——2001年2、哈利·波特与密室(

    生活 2021年10月19日
  • 手机进水后触屏失灵,手机进水触屏不管用了怎么办

    技术手机进水后触屏失灵,手机进水触屏不管用了怎么办手机进水触摸屏坏了手机进水后触屏失灵,如果还在保修期内,毫无疑问到商家的售后网点去维修,如果已过保修期,那么最好也要找到相对专业的维修机构进行维修,最好不要拿到路边摊或者

    生活 2021年10月27日
  • 88年属,88年出生属龙,人,的性格

    技术88年属,88年出生属龙,人,的性格神话传说中那巨大、宏伟的龙使人们产生无限遐想。所以龙那神奇的品质88年属,不管虚幻与否,肯定也包含在那些出生在龙年人们的心中。在中国,龙象征着皇帝或男性,它代表着权力。在龙年出生的

    生活 2021年10月26日
  • 怎么用Python爬取7日热门的文章

    技术怎么用Python爬取7日热门的文章怎么用Python爬取7日热门的文章,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言相信大家都很喜欢看那种非常

    攻略 2021年10月25日
  • 基于JAVA springboot+VUE前后端分离疫情防疫平台设计实现

    技术基于JAVA springboot+VUE前后端分离疫情防疫平台设计实现 基于JAVA springboot+VUE前后端分离疫情防疫平台设计实现基于JAVA springboot+VUE前后端分离

    礼包 2021年10月27日