异常与错误的区别
关于异常处理这一块,在官方的手册上介绍的不够详细,所以我在这里再做一个相对详细一点的总结。
首先要明白异常跟错误是两个不一样的概念,异常是出现正常逻辑之外的情况,而错误是指运行时出错了,比如,使用了一个未定义的变量等。异常需要抛出(throw)才能被捕捉到,而错误会导致程序执行终止。
PHP默认情况下,在代码出现了错误,如notice warning等消息时,错误信息会被直接打印到浏览器上,这个时候你通过 try catch是捕获不到错误信息的。php的try catch只能捕获到你自己 throw new Exception(" ")抛出的错误,通过throw之后,程度会直接进入到catch中继续执行。如果你想抛弃php自身的错误处理机制,这个时候可以通过set_error_handler自定义一个函数用来处理,在这个函数中你可以抛出异常,然后再通过catch捕捉到异常。
有关PHP的错误处理可以查看我的上一篇文章:《PHP错误处理机制》
PHP异常介绍
PHP异常一般是指在业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。
PHP异常处理机制借鉴了java c++等,但是PHP的异常处理机制是不健全的。异常处理机制目的是将程序正常执行的代码与出现异常如何处理的代码分离。异常主要有检测(try)、抛出(throw)和捕获(catch)等操作。
PHP异常处理中需要注意的有,当代码中有throw出来的异常,则必须要catch到,也即是一个 try 至少要有一个与之对应的 catch。可以定义多个 catch 可以捕获不同的对象,php会按这些 catch 被定义的顺序执行,直到完成最后一个为止。而在这些 catch 内,又可以抛出新的异常。php的异常也像JAVA的异常的一样,可以在最外层catch捕捉,也可以在throw的地方捕捉。
当一个异常被抛出时,其后的代码将不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。如果一个异常没有被捕获,而且又没用使用set_exception_handler()作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出未能捕获异常(Uncaught Exception ...)的提示信息。