设为首页 收藏本站
查看: 596|回复: 0

[经验分享] 详细解读php的异常处理机制

[复制链接]

尚未签到

发表于 2018-12-16 14:20:49 | 显示全部楼层 |阅读模式
异常机制

.异常基本知识
1.定义:异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程,这过程称为异常.
2.基本用法:
try
{
//可能出现的错误(异常)代码
}
catch(Exception $e)
{
//自己处理:捕捉异常并处理,
//自己不处理:抛出一个异常,即如下:
  throw $e;
}

其中,Exception是异常类(php中定义好的一个类,具体参见php参考文档:语音参考->异常处理).它已经封装好很多方法,常用如下:
         function __construct($message = null, $code = 0);
    final function getMessage();                // 返回异常信息
    final function getCode();                   // 返回异常代码
    final function getFile();                   // 返回发生异常的文件名
    final function getLine();                   // 返回发生异常的代码行号
    final function getTrace();                  // backtrace() 数组
    final function getTraceAsString();          // 已格成化成字符串的 getTrace() 信息

    /* 可重载的方法 */
    function __toString();                       // 可输出的字符串


3.入门案例

案例1:

结果:

adduser()如果出现异常,这句话就不会出现
error!修改失败

来自  


.异常使用的注意事项
1.异常的基本处理:
(1).当异常被抛出,其后的代码不会继续执行,php尝试查找匹配的catch代码块;见案例1.
(2).如果异常没有被捕获,而且有没有使用set_exception_handler()做相应的处理,那么会发生一个严重的错误(致命错误),并输出"Uncaught Exception"(未捕获异常)的错误消息;
(3).catch一个异常,可以进行处理或者不进行处理(catch函数中,直接抛出异常,即 throw $e,这时将启动php系统默认异常处理器(函数)来处理,见案例2。或者自己定义一个顶级异常处理器(函数),见案例3;
     通俗理解:即第一次抛出异常后,使用try{},ctach{}捕获到第一次抛出的异常,这时我们如果不对第一次抛出的异常进行处理,可以将此异常进行第二次抛出,这时,此异常将交给php默认异常处理器(函数)进行处理,或者交给用户自己定义的顶级异常处理器(函数)进行处理。
其中,定义顶级异常处理,需要两个步骤:
步骤一:定义顶级异常处理函数;
步骤二:修改默认定义异常处理函数set_exception_handler("函数名");

案例2
结果:
Fatal error: Uncaught exception 'Exception'
with message '不要输入A' in
E:\Software_default\wamp_wwwroot\exception\exception02.php:6 Stack trace: #0
E:\Software_default\wamp_wwwroot\exception\exception02.php(18): A1('A') #1
{main} thrown in E:\Software_default\wamp_wwwroot\exception\exception02.phpon line 6


来自  

案例3
结果:

我是顶级异常处理函数,其中,异常信息为:不要输入A

来自  
(4).如果抛出一个异常,就必须捕获它(否则会报错,产生Fatal error错误),或者使用用户定义的顶级异常处理函数进行处理
2.也可以自己定义一个异常类

class MyException Exception
{
}
3.使用多个catch代码块可以捕获不同种类的异常
(1).基本用法
try
{
//代码
  //可能抛出多种异常
}
catch(PDOException $e)//数据库异常
{
  //代码
}
catch(Exception $e)
{
  //代码
}
(2).案例

案例4

结果:

Fatal error: Uncaught
exception 'MyException1' with message 'a'
in
E:\Software_default\wamp_wwwroot\exception\exception04.php:12 Stack trace: #0
E:\Software_default\wamp_wwwroot\exception\exception04.php(21): A() #1
E:\Software_default\wamp_wwwroot\exception\exception04.php(31): C() #2 {main}
thrown in E:\Software_default\wamp_wwwroot\exception\exception04.phpon line 12


来自  
由于产生不捕获的异常,php默认显示其异常处理函数,这时,我们添加用户自定义的顶级处理函数

案例5

结果:

我是顶级异常处理函数,其中,异常信息为:a

来自  


3.PHP异常抛出的BUG

案例6

结果
Warning: Division by zero in E:\Software_default\wamp_wwwroot\exception\exception06.phpon line 3

来自  

在案例6中,8/0php认为是错误,而不是异常,所以,没有抛出异常,因此捕获不到异常
案例7
结果
Warning: fopen(aa.txt) [function.fopen]: failed to
open stream: No such file or directory in E:\Software_default\wamp_wwwroot\exception\exception07.phpon line 3



来自  
在案例7中, fopen()是一个很老的函数,从php1就已经存在了,当时并没有异常处理机制,php认为是错误,而不是异常,所以,没有抛出异常,因此捕获不到异常



  



附件:http://down.运维网.com/data/2367733


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652049-1-1.html 上篇帖子: php的部分安装参数说明(百度的) 下篇帖子: 开启 php的curl插件中的ssl功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表