先区别一下php中错误 与 异常的概念吧
PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况。平时遇到的warming、notice都是错误,只是级别不同而已。
PHP异常:一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。
PHP异常处理机制借鉴了java c++等,但是PHP的异常处理机制是不健全的。异常处理机制目的是将 程序正常执行的代码 与 出现异常如何处理的代码分离。
PHP是无法自动捕获异常的(绝大多数),只有主动抛出异常并捕捉。也就是说,对于异常,是可预见的。
以除数为0为例,看看PHP是如何处理的
1
2
3
4
5
6
7
8
9
10
|
<?php $a = 0; try { echo 4/ $a ; } catch (Exception $e ){ echo $e ->getMessage(); } //报错,PHP是无法自动捕获异常的,必须手动抛出 ?> |
下面手动抛出
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php $a = 0; try { if ( $a == 0){ throw new Exception( '除数不能为0' , 1); } echo 4/ $a ; //不会执行 } catch (Exception $e ){ echo $e ->getMessage(); } ?> |
可以看到,catch捕获到了异常。
PHP中对于异常的机制使用,一般用于业务逻辑判断上面,当业务逻辑不正常时,进行特殊处理。
下面看一下PHP错误处理机制。PHP提供了set_error_handler()函数进行错误处理。当错误发生时,set_error_handler会统一处理错误。
如下所示
1
2
3
4
5
6
7
8
9
10
11
|
<?php $a = 0; function handle( $errno , $errstr , $errfile , $errline ){ echo $errfile ; } set_error_handler( 'handle' ); echo 4/ $a ; echo PHP_EOL; echo 'hehe' ; ?> |
上面的
1
|
echo 4/ $a ;发生了错误,此时进入了错误处理函数handle中,进行错误处理,一般我们在handle中加入 die ,终止执行。 |
注:此文在PHP7下已过时。
最后更新于 2017年9月4日
相关博文
PHP异常与错误处理机制