最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PHP5OOP编程中的代理与异常定制(三)
时间:2022-07-02 10:23:24 编辑:袖梨 来源:一聚教程网
现在,你可以实现QueryException类。注重你是如何遍历调用栈以在脚本中查找实际导致错误的位置的。这正好适用于当抛出异常的DBQuery对象是一个继续自DBQuery对象的子类的情况。
列表5:QueryException类。
/**
*查询异常
*
*当试图执行一个查询时,假如一个错误发生,将由{@link DBQuery}对象抛出错误
*/
class QueryException extends Exception
{
/**
* 查询文本
*
* @var字符串$QueryText;
*/
protected $QueryText;
/**
*来自数据库的错误号/代码
*
* @var字符串$ErrorCode
*/
protected $ErrorNumber;
/**
*来自数据库的错误消息
*
* @var字符串$ErrorMessage
*/
protected $ErrorMessage;
/**
*类构造器
*
* @参数:DBQuery $db,是抛出异常的查询对象
*/
public function __construct(DBQuery $query)
{
/*得到调用栈*/
$backtrace = $this->GetTrace();
/*把行和文件设置到错误实际发生的位置*/
if (count($backtrace) > 0) {
$x = 1;
/*假如查询类被继续,那么我们需要忽略由子类所进行的调用*/
while((! isset($backtrace[$x]['line'])) ||
(isset($backtrace[$x]['class']) && is_subclass_of($backtrace[$x]['class'], 'DBQuery')) ||
(strpos(strtolower(@$backtrace[$x]['function']), 'call_user_func')) !== false ) {
/*循环执行,只要没有行号或调用的函数是DBQuery类的一个子类*/
$x;
/*假如我们到达栈底,那么我们使用第一个调用者*/
if (($x) >= count($backtrace)) {
$x = count($backtrace);
break;
}
}
/*假如上面的循环至少执行一次,那么我们可以把它减1以查找实际的引起错误的代码行
*/
if ($x != 1) {
$x -= 1;
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22