php中异常处理方法小结

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

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

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

1、异常类的层级关系,代码如下:

代码如下:

class NotFoundException extends Exception{}

class InputException extends Exception{}

class DBException extends Exception{}

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('很抱歉,你所访问的相册不存在');

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

php实例代码如下:

代码如下:

<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> 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 类的一个扩展来创建的,这样它就继承了旧类的所有属性和方法.

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

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

4.由于 e-mail 含有字符串 "example",第二个条件会触发异常.

5."catch" 代码块会捕获异常,并显示恰当的错误消息.

如果没有捕获 customException,紧紧捕获了 base exception,则在那里处理异常,重新抛出异常,有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理,可以在一个 "catch" 代码块中再次抛出异常,代码如下:

总结:PHP异常的使用方法分三步:

第一步:定义异常类,如果不定义就用系统默认的异常类;

第二步:当出现异常时用 throw 抛出异常,例如 ex1($num2);异常的参数是$num2用该异常的getMessage()获取;

第三步:触发异常,用try子句,当满足条件时  throw new ex1($num);

第四步:catch捕获异常 catch (ex2 $e),相当于实例化一个定义好的异常类ex2为$e;

注意,异常可以定义多个,但是只能触发一个,也就是说只能用catch捕获一个异常.

基本异常类,创建可抛出一个异常的函数:

代码如下:

function num($num){
 if ($num>1){//异常抛出条件
  $msg="数值不能大于1″;//异常提示信息
  throw new Exception($msg);//抛出异常
 }
 echo "数值小于1″;
}
//在 "try" 代码块中触发异常
try {
 num(3);
 echo "执行正常";
}
//捕获异常
catch (Exception $e){
 echo "错误信息:".$e->getMessage();//Exception()的系统方法获取异常信息
 echo "错误文件:".$e->getFile();//Exception()的系统方法获取异常文件名
 echo "行数:".$e->getLine();//Exception()的系统方法获取异常行数
}
//======================================================================
echo "<br>========================================================<br>";
//扩展基本异常类
function checkEmail($email){//定义一个可以抛出异常的判断EMAIL合法性的函数
 if (filter_var($email,FILTER_VALIDATE_EMAIL)==false){
  throw new checkEmailException($email);//抛出异常用EMAIL做参数
 }
 echo "邮件合法";
}
class checkEmailException extends Exception{//定义扩展异常类
 public function errormsg(){
  $msg="错误原因:".$this->getMessage()."不是一个合法的EMAIL地址!";
  $msg.="错误文件名:".$this->getFile();
  $msg.="错误行数:".$this->getLine();
  echo $msg;
 }
}
$email="email…..@chhua.com";
try {//触发异常
 checkEmail($email);
}
//捕获异常
catch (checkEmailException $e){
 $e->errormsg();
}
//==================================多个异常的捕获
echo "<br>===================================================<br>";
class ex1 extends Exception{//定义一个异常类
 public function msg(){
  $msg="错误原因:".$this->getMessage()."大于100<br>";
  $msg.="错误文件:".$this->getFile()."<Br>";
  $msg.="错误代码:".$this->getCode()."<br>";
  $msg.="行数:".$this->getLine()."<br>";
  echo $msg;
 }
}
class ex2 extends Exception{//定义一个异常类
        public function msg(){
  $msg="错误原因:".$this->getMessage()."等于100<br>";
  $msg.="错误文件:".$this->getFile()."<Br>";
  $msg.="行数:".$this->getLine()."<br>";
  echo $msg;
 }
}
$num2=100;
try {
 if ($num2>100){//当条件满足时触发
  throw new ex1($num2);
 }
 if ($num2==100){//当条件满足时触发
  throw new ex2($num2);
 }
}
catch (ex2 $e){//捕获触发的异常
 $e->msg();
}
catch (ex1 $e){//捕获触发的异常
 $e->msg();
}

希望本文所述对大家的php程序设计有所帮助。

(0)

相关推荐

  • php PDO异常处理详解

    异常处理: PHP:默认为直接报错 MYSQL:默认为静默模式,错就错,不报错 PDO:默认为静默模式,错就错,不报错 以前,当PHP碰到错误的时候,会直接报错,错误处理会变得相当麻烦.后来,当错误发生之后,会将错误信息不再直接输出,放到一个类的对象里(PDOException) pdo异常处理设置: 设置PDO::ATTR_ERRMODE ,有以下三个值: PDO::ERRMODE_SILENT: 默认模式,不主动报错,需要主动以 $pdo->errorInfo()的形式获取错误信息. PDO

  • PHP中异常处理的一些方法整理

    每一个新的功能添加到PHP运行时会创建一个指数随机数,通过这样的方式开发者可以使用和甚至滥用这个新特性.然而,直到一些好的和坏的使用情况陆续出现开发者们才达成了共识.当这些新案例不断浮现,我们终于可以辨别出什么是最好或最坏的做法. 异常处理在PHP中的确无论如何都不算是一个新的特征.但在本文中,我们将讨论在PHP 5.3中基于异常处理的两个新的特点.第一个是嵌套异常第二是一套SPL(现在的PHP运行机制的一个核心扩展)的扩展的新的异常类型.这两个新特性,这本书里都能找到最佳实践值得各位去详细研究

  • php5编程中的异常处理详细方法介绍

    1 首先是try,catch <?php  $path = "D:\\\\in.txt";  try //检测异常  {  file_open($path);  }  catch(Exception $e) //捕获异常  {  echo $e->getMessage();  } function file_open($path)  {  if(!file_exists($path)) //如果文件无法找到,抛出异常对象  {  throw new Exception(&q

  • PHP的异常处理类Exception的使用及说明

    1.首先php5提供了基本的异常处理类,可直接使用 复制代码 代码如下: <?php class Exception { protected $message = 'Unknown exception'; // 异常信息 protected $code = 0; // 用户自定义异常代码 protected $file; // 发生异常的文件名 protected $line; // 发生异常的代码行号 function __construct($message = null, $code =

  • PHP中的错误处理、异常处理机制分析

    例: 复制代码 代码如下: <?php $a = fopen('test.txt','r'); //这里并没有对文件进行判断就打开了,如果文件不存在就会报错 ?> 那么正确的写法应该如下: 复制代码 代码如下: <?php if(file_exists('test.txt')){ $f=fopen('test.txt','r'); //使用完后关闭 fclose($f); } ?> 一.PHP错误处理的三种方式A.简单的die()语句: 等价于exit(); 例: 复制代码 代码如

  • 一个显示效果非常不错的PHP错误、异常处理类

    一.效果图: 二.实现代码 复制代码 代码如下: <?php // 自定义异常函数set_exception_handler('handle_exception'); // 自定义错误函数set_error_handler('handle_error'); /** * 异常处理 * * @param mixed $exception 异常对象 * @author blog.snsgou.com */function handle_exception($exception) { Error::ex

  • PHP异常处理定义与使用方法分析

    本文实例讲述了PHP异常处理定义与使用方法.分享给大家供大家参考,具体如下: <?php //php5提供了基本的异常处理类,可直接使用 ,不需要自己再定义 // class Exception // { // protected $message = 'Unknown exception'; // 异常信息 // protected $code = 0; // 用户自定义异常代码 // protected $file; // 发生异常的文件名 // protected $line; // 发生

  • PHP异常处理Exception类

    异常(Exception)用于在指定的错误发生时改变脚本的正常流程. 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法. 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 当异常被触发时,通常会发生: 当前代码状态被保存 代码执行被切换到预定义的异常处理器函数 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本 我们将展示不同的错误处理方法: 异常的基本使用 创建自定义的异常处理器 多个异常 重新抛

  • 实例讲解如何在PHP的Yii框架中进行错误和异常处理

    Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler,set_error_handler实现的.通过这两个PHP内置函数,可以对程序中未捕获的异常以及错误进行接管处理,从而提高程序的可维护性.这在大型系统是至关重要的,当发生错误时,我们希望能将相关详细信息记录,甚至是即时发送报警,从而缩短故障修复时间,提高整个系统的稳定性. 默认情况下,Yii会将异常处理分配给CApplication::handleException,

  • PHP如何抛出异常处理错误

    首先要知道什么是PHP异常? 异常(Exception)用于在指定的错误发生时改变脚本的正常流程. PHP 5 提供了一种新的面向对象的错误处理方法. 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 当异常被触发时,通常会发生: 当前代码状态被保存 代码执行被切换到预定义的异常处理器函数 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本 我们将展示不同的错误处理方法: 异常的基本使用 创建自定义的异常处理器

  • php异常处理方法实例汇总

    本文实例讲述了php异常处理方法.分享给大家供大家参考.具体如下: <?php $path = "D://in.txt"; try //检测异常 { file_open($path); } catch(Exception $e) //捕获异常 { echo $e->getMessage(); } function file_open($path) { if(!file_exists($path)) //如果文件无法找到,抛出异常对象 { throw new Exceptio

  • PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法

    异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. PHP 5 添加了类似于其它语言的异常处理模块.在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获.需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常.每一个 try 至少要有一个与之对应的 catch.使用多个 catch 可以捕获不同的类所产生的异常.当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一

随机推荐