search

Home  >  Q&A  >  body text

php中的异常处理机制

在java编程语言中,有一套比较完善的异常处理机制,而且内部已经封装的比较好了。php中的异常处理机制却没有那么强大和完善,那它是如何实现的呢,是把每个异常当成错误来处理的吗?

PHP中文网PHP中文网2901 days ago515

reply all(2)I'll reply

  • 怪我咯

    怪我咯2017-04-10 15:04:06

    PHP 内置了一个基类 Exception,你需要继承这个类来定义自己的异常。
    当异常被触发时通过 catch 关键字来捕获,进行异常处理。

    catch (MyException $e) {
         //MyException process here...
    }
    

    抛出异常可以这样做:

    $myException = new MyException(/*something here*/);
    throw $myException;
    

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:04:06

    关于前段时间,自己提到的一个php中的异常处理机制问题,由于回答者甚少,笔者只好自己广搜网络资源以及大拿的文章(尤其参考PHP核心技术与最佳实践一书),现整理如下,如有错误,欢迎指出:

    在各种语言中,异常和错误的概念其实是不一样的,在PHP中,任何自身错误都会触发一个错误,而不是抛出异常(对于一些情况,会同时抛出异常和错误!)。在这个意义上,如果像使用异常一样去处理一些不可预知的情况,是办不到的。比如,想在数据库连接打不开时触发异常,是不可行的,这在PHP中把他作为错误抛出,而不会作为异常自动捕获。

    经典除零问题:

    try {
    $a = 5 / 0;
    echo $a;
    } catch (Exception $e) {
    echo $e->getMessage();
    $a = 123;
    }
    echo $a;
    

    输出结果是:

    PHP只有你手动throw抛出异常后,才能捕获异常(一般是这样,但也有php异常可以自动捕获)。

    而对于java,它有比较完善的异常处理机制,把一切认为不正常的情况都当作了异常,而PHP却把他们当成了错误,根本原因在于,java里异常是唯一的错误报告方式,而在php中却不是这样。通俗一点就是,这两门语言的设计者对于异常和错误的界定存在分歧,什么是异常,什么是错误,他们的设计者存在不同的观点而已。

    说道异常,就不得不提php中异常的兄弟-----错误。php中错误的处理比异常的价值大得多,而且php提供了比较强大的错误处理函数,详细请自己查阅手则或者网络资源。

    reply
    0
  • Cancelreply