`
zccst
  • 浏览: 3322709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP异常处理

    博客分类:
  • PHP
 
阅读更多
作者:zccst

一、基本用法

Exception()方法是抛出异常的基类。
try{
    ...
}catch(Exception $e){
    ...
}

在逻辑中抛异常
throw new Exception();
throw new 自定义异常。

二、扩展一个异常的方式
1,简单方式
class OutsourceNotFoundException extends Exception {}


2,扩展方式
class OutsourceTimeoutException extends Exception {
	public $status;
	public function __construct($status, $msg) {
		$this->status = $status;
		parent::__construct($msg);	
	}
}

三、总结
1,结合事务回滚,可以有很好的用户体验
2,可以连续catch()多个不同的异常,并区别对待
3,可以直接throw异常,让上一级来捕捉该异常

实例:
本处逻辑:
		$trans = Yii::app()->db->beginTransaction();
		try {
			//在该方法中,可以抛异常,让上级逻辑来捕捉,并直接返回到前端。
			Yii::app()->dispatcher->notify(new sfEvent($this, 'sta.saveTimeoutReason', array('id'=>$params['timeout_reason_id'])));
			//也可以在本级直接捕捉该异常,保存数据,然后抛出来,再让上一级捕捉(区别是此时异常性质变了,从特殊异常变为常规异常)
			Yii::app()->dispatcher->notify(new sfEvent($this, 'outsource.complete', array('user_id' => $params['user_id'], 'is_force' => $params['is_force'])));

			OutsourceStatusLog::log($this,$params['dst_status_id'], $params['user_id'], "确认完成");
			$this->status_id = $params['dst_status_id'];
			$this->save();

			$trans->commit();
		}
		catch(FinishCheckException $e) { //【疑问1:如果只有FinishCheckException,即数据保存了。但只保存到抛出异常的位置?后面的呢?】
			$this->save();
			$trans->commit(); // 结单检测异常属于可控异常, 先把数据保存一下
			throw $e;         // 抛出的该异常,仍然是FinishCheckException类型(留给上一级捕捉)
		}
		catch(Exception $e) {
			$trans->rollBack(); // 【疑问2:如果捕捉到常规异常就全部回滚?也即除了FinishCheckException异常都回滚】
			throw $e;
		}



上级逻辑:
		try {
			$outsource = Outsource::model()->findByCommOid($oid);
			
			if(!$this->current_user->isMemberOfIdc($outsource->idc_id)) {
				$msg = "你不是xx";
				$this->response(array('status' => 1, 'msg' => $msg));
			}

			$result = $outsource->doAction($action, $params);

			if($result) {
				$this->user->setFlash('info', $result);
			}

		}
		catch(OutsourceNotFoundException $e) {
			$this->response(array('status' => 1, 'msg' => $e->getMessage()));	
		}
		catch(NotCompleteException $e) {
			$this->response(array('status' => 2, 'msg' => $e->getMessage()));	
		}
		catch(FinishCheckException $e) {
			// 结单检测接口, 需要显示当前截单接测结果和进度
			$this->response(array('status' => $e->status, 'result' => $e->getMessage()));
		}
		catch(OutsourceTimeoutException $e) {
			// 结单需要检查是否超时
			$this->response(array('status' => $e->status, 'result' => $e->getMessage()));
		}
		catch(OutsourceOperateNotAllowedException $e) {
			$error = "该外包单的状态已经发生变化,可能其他用户已经操作。请刷新";
		}
		catch(Exception $e) {
			Yii::app()->exception_watcher->notify_exception($e);
			$error = $e->getMessage();
		}
		//返回
分享到:
评论

相关推荐

    php异常处理方法实例汇总

    以下将详细介绍php异常处理方法,并实例汇总常见的php异常处理技巧。 首先,try关键字用于包含可能抛出异常的代码块。紧接着try块的是一个或多个catch块,用于捕获try块中发生的特定异常。catch块应该紧跟着try块,...

    PHP异常处理.docx

    >getMessage().'</b>is:<i>'....总结来说,PHP 的异常处理机制是一种强大的工具,可以帮助开发者更好地管理程序运行过程中的错误和异常情况。通过合理设计和使用异常处理逻辑,可以提高程序的健壮性和用户体验。

    计算机后端-PHP最佳开发入门实战课程09-04 PHP异常处理-1.mp4

    计算机后端-PHP最佳开发入门实战课程09-04 PHP异常处理-1.mp4

    计算机后端-PHP最佳开发入门实战课程09-04 PHP异常处理-2.mp4

    计算机后端-PHP最佳开发入门实战课程09-04 PHP异常处理-2.mp4

    详细解读php的异常处理机制-参考源码

    通过对这些源码的分析,我们可以更深入地理解PHP异常处理机制的细节和实际操作。 总之,PHP的异常处理机制是程序健壮性的重要保障。通过合理地使用`try-catch-finally`结构和自定义异常类,我们可以有效地管理错误...

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

    知识点二:PHP异常处理 异常处理是PHP中处理运行时错误的另一种机制。它是一种更加结构化和面向对象的错误处理方式。当发生错误时,可以通过throw关键字抛出一个异常,然后通过try-catch块来捕获和处理这个异常。...

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

    在PHP异常处理中,还存在一个重要的方法getPrevious(),它用于处理嵌套异常。当一个异常被抛出后,开发者可以调用这个方法来访问被嵌套的原始异常。这对于诊断和记录错误详情非常有用,因为它能够提供异常发生的完整...

    PHP Exception(异常处理).md

    ### PHP异常处理详解 #### 一、PHP异常处理概述 PHP异常处理机制为开发者提供了一种强大且灵活的方式来处理程序运行过程中可能出现的各种错误和异常情况。这种机制的主要优点在于能够将错误处理逻辑与正常业务逻辑...

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

    PHP异常处理是编程中用于处理运行时错误的一种机制,它允许开发者优雅地处理程序中可能出现的问题,而不是让程序突然崩溃。在PHP 5之后,异常处理成为标准的一部分,提供了更强大的错误管理方式。 异常(Exception...

    PHP异常处理浅析

    PHP异常处理是编程中处理运行时错误的一种机制,它可以让开发者更有条理地组织错误处理代码,而不必使用传统的条件语句来检查可能发生的错误。异常处理在PHP中是非常重要的一环,特别适合于处理那些意料之外的程序...

    轻松学PHP之PHP的错误和异常处理

    轻松学PHP之PHP的错误和异常处理,可以轻松学习PHP。PHP学习的宝典。PHP的错误和异常处理是非常重要的。

    php 异常处理实现代码

    - `Exception`类是所有PHP异常的基类,你可以创建自定义异常类来扩展它。 2. **异常处理结构**: - `try`块:包含可能会抛出异常的代码。 - `catch`块:捕获并处理特定类型的异常。在给定的例子中,`catch...

    PHP异常处理Exception类

    对于PHP这种脚本语言来说,在PHP 5版本之后,引入了面向对象的异常处理方法,这为我们提供了一种更强大和灵活的错误处理方式。 在PHP中,异常处理主要通过Exception类来进行。Exception类是所有内置的异常类的基类...

    xser_exception_handler -- xser php fr v0.1 自定义捕获异常信息

    "xser_exception_handler" 是一个专门为PHP框架设计的自定义异常处理器,用于增强标准的PHP异常处理功能,提升程序的健壮性和用户体验。在这个框架版本v0.1中,我们看到了对异常捕获和处理的定制化实现。 异常处理...

    php异常处理捕获错误整理

    在PHP开发中,异常处理和错误捕获是至关重要的环节,它们能够保证程序在面对各种异常情况时,能够妥善处理并给出相应的反馈,从而保证程序的健壮性和用户体验。本文将深入探讨PHP中关于异常和错误处理的相关知识点。...

    PHP异常类及异常处理操作实例详解

    在PHP编程中,异常处理是一种重要的错误处理机制,它允许开发者以更为优雅的方式处理程序运行时可能出现的问题。从PHP 5.1.0版本开始,引入了Exception类,使得异常处理更加规范和灵活。异常处理的基本语法结构包括...

Global site tag (gtag.js) - Google Analytics