康盛博客

如果你觉得本站能帮助你学习PHP编程,请推荐给你的朋友们!

php异常处理

php异常处理

本PHP教程主要学习php异常处理

PHP的错误处理为我们在程序遇到错误时提供了相关的错误信息,我们可以依靠PHP本身的错误处理规则来处理所发生的错误,你还可以更灵活的自定义错误处理程序,那就是上节我们所了解到的set_error_handler()函数。这个错误处理函数接受一个你所定义的错误函数,这个你所定义的错误处理函数的参数在2~5个之间。这是上节我们没有了解到的,在此补充一下。

在其它的面向对象的编程语言中,不管是JAVA、还是C++或者其它的那怕是JAVASCRIPT也提供了异常(Exception)处理,那么什么叫异常呢?

什么叫异常呢

一句话:在指定的错误发生时改变脚本的正常流程。

在PHP5中我们才有机会接触到异常处理,同样它的语法也是借用了C++中经典的语法形式,即:

try{

   if 发生错误

       那么 throw excepting(”抛出错误信息”)

}catch(捕获上面抛出的信息){

   处理这个错误

}

上面这只是一段伪代码,只是说明异常处理的一般流程。当异常发生时,通常会发生以下情况:

1.当前正被执行的代码会被保存下来

2.代码会被切换至异常处理函数处

3.根据你所定义的流程,代码可能终止执行或者执行其他脚本

 

异常的基本使用原则

通过伪代码我们可以看到当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 “catch” 代码块。但是如果你的异常没有被捕获,那么同样也会发生一个致使的错误。

下面的代码由于没有捕获这个异常,将会发生一个:

Fatal error: Uncaught exception ‘Exception’ with message ‘除数不能为0′ in…的错误。

<?php
 function check_divisor($num){
  if($num==0){
   throw new Exception("除数不能为0");
  }
  return true;
 }
 check_divisor(0);
?>

所以我们要用适当的代码来正确处理这个异常。

处理程序应当是下面这个样子:

1.Try – 使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

2.Throw – 这里规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”

3.Catch – “catch” 代码块会捕获异常,并创建一个包含异常信息的对象

 

让我们来为上面的代码加一个异常处理的过程吧:

<?php
	function check_divisor($num){
		if($num==0){
			throw new Exception("除数不能为0");
		}
		return true;
	}
	try{
		check_divisor(0);
	}
	catch(Exception $e){
		echo 'Error Message:'.$e->getMessage();
		// echo 'Error File:'.$e->getFile();
		// echo 'Error Code:'.$e->getCode();
		// echo 'Error Line:'.$e->getLine();
		// echo 'Error Trace:'.$e->getTrace();
		//echo 'Error TraceAsString:'.$e->getTraceAsString();
	}
?>

通过对比伪代码我们应该能够理解这个错误处理流程!再次查看这段代码,我们发现它已经能够处理异常了:
Error Message:除数不能为0

下面是这段代码的简单解析:
1.创建 check_divisor() 函数。它检测$num是否为0。如果是,则抛出一个异常。
2.在 “try” 代码块中调用 check_divisor() 函数,把$num设为0。
3.check_divisor() 函数中的异常被抛出。
4.”catch” 代码块接收到该异常,并实例化一个包含异常信息的对象 ($e)。
5.通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息。

补充说明exception类包括6个方法,我在代码已经例出。大家一看就能明白是什么意思。getTrace()和getTraceAsString()差不多,只不过前者输出一个数组,而后者而是一个string。

说明:exception类是一个基类,我们可以扩展这个类,但你不能覆盖exception类中的任何方法,因为使用了final关键字。

无相关日志,你可以查看以下文章

Tags:

当前位置: 康盛博客 > 基于wordpress的PHP教程 > php异常处理

写个评论



文章分类:

站内搜索:


 

最新文章: