PHP异常-与众不同的异常理念

栏目: PHP · 发布时间: 5年前

内容简介:在php中本来是没有异常概念的,后来为了向企业级开发进军,就向java和其他语言借鉴了异常机制但与java异常不一致的是,java中的代码出现错误就会以异常的方式抛出错误,可以认为异常就是解决代码中错误的一种方式,而PHP的处理方式则不一样,主要区别在两点由于上面的历史问题,导致PHP的异常处理是不足的,绝大多数情况下,无法自动抛出异常,必须使用if...else对代码进行判断,然后针对不符合预期的代码手动抛出异常(如除数为0的例子)

php 中本来是没有异常概念的,后来为了向企业级开发进军,就向 java 和其他语言借鉴了异常机制

但与java异常不一致的是,java中的代码出现错误就会以异常的方式抛出错误,可以认为异常就是解决代码中错误的一种方式,而PHP的处理方式则不一样,主要区别在两点

  1. 首先在概念上,认为错误和异常是两回事。错误是由于代码自身问题,如语法错误等导致的;异常则是由于业务流程上出现了不符合预期,出现了以预期结果不同的情况,异常不是语法错误
  2. java遇到错误会自动抛出异常,而PHP则在大多数情况下,必须手动抛出异常

由于上面的历史问题,导致PHP的异常处理是不足的,绝大多数情况下,无法自动抛出异常,必须使用if...else对代码进行判断,然后针对不符合预期的代码手动抛出异常(如除数为0的例子)

PHP中,使用异常的基本语法是try...catch,这与其他大多语言都是一样的,基本语法结果如下

try{
    //抛出异常
    throw new Exception("异常信息");
    //异常后面的代码不会执行
}catch(Exception $e){
    //捕获异常之后的处理代码
    echo $e->getMessage();
}

在PHP中,与java不一样,java会将很多的错误都当作异常,并利用内置的异常处理类,抛出异常并处理。

PHP则不会主动抛出异常(某些内置异常处理类的初外),需要开发者手动使用throw 抛出,否则,程序出现异常,也不会被抛出,如

$num = 10;
try {
    $res = $num / 0;
} catch (Exception $e) {
    echo $e->getMessage();
}

上面代码运行结果如下

Warning: Division by zero in  D:\phpStudy\WWW\test\11.php on line  12

只是在页面中显示错误信息,而没有执行catch中的代码

将上面代码修改如下,才可以抛出异常并捕获

$num1 = 10;
$num2 = 0;
try {
    if ($num2 == 0) {
        throw new Exception('除数不能为0');
    } else {
        echo $num1 / $num2;
    }
} catch (Exception $e) {
    echo $e->getMessage();
}

运行结果如下

除数不能为0

另外要注意,throw 后面的代码不会执行

总结:

在PHP中,与java不一样,PHP不会主动抛出异常(除非内置异常处理类),需要使用throw 抛出,然后使用catch捕获


以上所述就是小编给大家介绍的《PHP异常-与众不同的异常理念》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高效前端:Web高效编程与优化实践

高效前端:Web高效编程与优化实践

李银城 著 / 机械工业出版社 / 2018-3-15 / 89.00元

这不是一本单纯讲解前端编程技巧的书,而是一本注重思想提升和内功修炼的书。 全书以问题为导向,精选了前端开发中的34个疑难问题,从分析问题的原因入手,逐步给出解决方案,并分析各种方案的优劣,最后针对每个问题总结出高效编程的最佳实践和各种性能优化的方法。 全书共7章,内容从逻辑上大致可以分为两大类: 第一类,偏向实践,围绕HTML、CSS、JavaScript等传统前端技术,以及PW......一起来看看 《高效前端:Web高效编程与优化实践》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具