PHP异常与错误处理机制

先区别一下php中错误 与 异常的概念吧

PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况。平时遇到的warming、notice都是错误,只是级别不同而已。

PHP异常:一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。

PHP异常处理机制借鉴了java  c++等,但是PHP的异常处理机制是不健全的。异常处理机制目的是将 程序正常执行的代码  与 出现异常如何处理的代码分离。

PHP是无法自动捕获异常的(绝大多数),只有主动抛出异常并捕捉。也就是说,对于异常,是可预见的。

以除数为0为例,看看PHP是如何处理的

<?php 
$a = 0;
try {
	echo 4/$a;
}
catch (Exception $e){
	echo $e->getMessage();
}
//报错,PHP是无法自动捕获异常的,必须手动抛出
?>

  下面手动抛出

<?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会统一处理错误。

如下所示

<?php 
$a = 0;
function handle($errno,$errstr,$errfile,$errline){
	echo $errfile;
}
set_error_handler(‘handle‘);

echo 4/$a;
echo PHP_EOL;
echo ‘hehe‘;
?>

  上面的

echo 4/$a;发生了错误,此时进入了错误处理函数handle中,进行错误处理,一般我们在handle中加入die,终止执行。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。