php中异常处理方法总结

本文实例总结了php中异常处理方法。分享给大家供大家参考。具体分析如下:

当异常被触发时,通常会发生:

当异常被触发时,通常会发生:在PHP5中添加了类似于其它语言的错误异常处理模块。在
PHP代码中所产生的异常可被 throw语句抛出并被 catch
语句捕获。需要进行异常处理的代码都必须放入 try
代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的
catch。

在PHP5中添加了类似于其它语言的错误异常处理模块。在
PHP代码中所产生的异常可被 throw语句抛出并被 catch
语句捕获。需要进行异常处理的代码都必须放入 try
代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的
catch。使用多个 catch 可以捕获不同的类所产生的异常。当 try
代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP
代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch
代码块内再次抛出(throw)异常。当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而
PHP 就会尝试查找第一个能与之匹配的
catch。如果一个异常没有被捕获,而且又没用使用 set_exception_handler()
作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught
Exception … (未捕获异常)的提示信息。

使用多个 catch 可以捕获不同的类所产生的异常,当 try
代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP
代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch
代码块内再次抛出(throw)异常,当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而
PHP 就会尝试查找第一个能与之匹配的
catch,如果一个异常没有被捕获,而且又没用使用 set_exception_handler()
作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught
Exception … (未捕获异常)的提示信息.

1、异常类的层级关系:

1、异常类的层级关系,代码如下:
复制代码 代码如下:class NotFoundException
extends Exception{}

 代码如下

class InputException extends Exception{}

class NotFoundException extends Exception{}  
class InputException extends Exception{}  
class DBException extends Exception{} 

class DBException extends Exception{}

2、配置未捕捉异常的处理器:

2、配置未捕捉异常的处理器,代码如下:
复制代码 代码如下:function
exception_uncaught_handler(Exception $e) {   
header(‘Content-type:text/html; charset=utf-8’);   
if ($e instanceof NotFoundException)   
exit($e->getMessage());   
elseif ($e instanceof DBException)   
exit($e->getMessage());   
else   
exit($e->getMessage());   
}   
set_exception_handler(‘exception_uncaught_handler’);
3、在数据库连接代码,手动抛出DBException异常但未使用try…catch进行捕获处理,该异常将被PHP自定义异常处理器,exception_uncaught_handler()函数处理:
金宝搏平台,复制代码 代码如下:$this->resConn =
mysql_connect ($CONFIGS[‘db_host’], $CONFIGS[‘db_user’],
$CONFIGS[‘db_pwd’]);   
if (false == is_resource($this->resConn))   
throw new
DBException(‘数据库连接失败。’.mysql_error($this->resConn));
4、业务逻辑一瞥:
复制代码 代码如下:if (0 !=
strcmp($curAlbum->interest_id, $it))  

 代码如下

throw new NotFoundException(‘很抱歉,你所访问的相册不存在’);

function exception_uncaught_handler(Exception $e) {  
header(‘Content-type:text/html; charset=utf-8’);  
if ($e instanceof NotFoundException)  
exit($e->getMessage());  
elseif ($e instanceof DBException)  
exit($e->getMessage());  
else  
exit($e->getMessage());  
}  
set_exception_handler(‘exception_uncaught_handler’);  

以上就是PHP自定义异常处理器的具体使用方法.

3、在数据库连接代码,手动抛出DBException异常但未使用try…catch进行捕获处理,该异常将被PHP自定义异常处理器

php实例代码如下:
复制代码 代码如下: class customException
extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = ‘Error on line ‘.$this->getLine().’ in
‘.$this->getFile()
.’: ‘.$this->getMessage().’ is not a valid E-Mail address’;
return $errorMsg;
}
}
 
$email = “someone@example.com”;
 
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 //check for “example” in mail address
 if(strpos($email, “example”) !== FALSE)
  {
  throw new Exception(“$email is an example e-mail”);
  }
 }
 
catch (customException $e)
 {
 echo $e->errorMessage();
 }
 
catch(Exception $e)
 {
 echo $e->getMessage();
 }
?>
例子解释:上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常.

 代码如下

1.customException() 类是作为旧的 exception
类的一个扩展来创建的,这样它就继承了旧类的所有属性和方法.

exception_uncaught_handler()函数处理:

2.创建 errorMessage() 函数,如果 e-mail
地址不合法,则该函数返回一个错误消息.

$this->resConn = mysql_connect ($CONFIGS[‘db_host’],
$CONFIGS[‘db_user’], $CONFIGS[‘db_pwd’]);  
if (false == is_resource($this->resConn))  
throw new
DBException(‘数据库连接失败。’.mysql_error($this->resConn)); 

3.执行 “try” 代码块,在第一个条件下,不会抛出异常.

4、业务逻辑一瞥:

发表评论

电子邮件地址不会被公开。 必填项已用*标注