最新下载
热门教程
- 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;
相关文章
- 无限暖暖搭乘大鸟巴士怎么玩 公测第三天每日任务做法介绍 12-27
- 奇迹暖暖绚光护佑搭配攻略 奇迹暖暖绚光护佑过关攻略 12-27
- 绝区零月城柳意像影画怎么样 12-27
- 无限暖暖翩翩愿飞去怎么样 12-27
- 黑神话悟空1.0.12.16581版本更新公告 12-27
- 光遇12.27红石碎片在哪里 12-27