日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

PHP5 OOP編程中的代理與異常(5)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:詳細(xì)介紹php5編程中的異常處理
1 首先是try,catch <?php $path = "D:\\in.txt"; try //檢測異常 { file_open($path); } catch(Exception $e) //捕獲異常 { echo $e->getMessage(); } function

列表5:QueryException類。

/**
*查詢異常
*
*當(dāng)試圖執(zhí)行一個(gè)查詢時(shí),如果一個(gè)錯(cuò)誤發(fā)生,將由{@link DBQuery}對(duì)象拋出錯(cuò)誤
*/
class QueryException extends Exception
{
/**
* 查詢文本
*
* @var字符串$QueryText;
*/
protected $QueryText;
/**
*來自數(shù)據(jù)庫的錯(cuò)誤號(hào)/代碼
*
* @var字符串$ErrorCode
*/
protected $ErrorNumber;
/**
*來自數(shù)據(jù)庫的錯(cuò)誤消息
*
* @var字符串$ErrorMessage
*/
protected $ErrorMessage;
/**
*類構(gòu)造器
*
* @參數(shù):DBQuery $db,是拋出異常的查詢對(duì)象
*/
public function __construct(DBQuery $query)
{
 /*得到調(diào)用棧*/
 $backtrace = $this->GetTrace();
 /*把行和文件設(shè)置到錯(cuò)誤實(shí)際發(fā)生的位置*/
 if (count($backtrace) > 0) {
  $x = 1;
  /*如果查詢類被繼承,那么我們需要忽略由子類所進(jìn)行的調(diào)用*/
  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 ) {
   /*循環(huán)執(zhí)行,只要沒有行號(hào)或調(diào)用的函數(shù)是DBQuery類的一個(gè)子類*/
    $x;
   /*如果我們到達(dá)棧底,那么我們使用第一個(gè)調(diào)用者*/
   if (($x) >= count($backtrace)) {
    $x = count($backtrace);
    break;
   }
 }
 /*如果上面的循環(huán)至少執(zhí)行一次,那么我們可以把它減1以查找實(shí)際的引起錯(cuò)誤的代碼行
 */
 if ($x != 1) {
  $x -= 1;
 }
 /*最后,我們可以設(shè)置文件和行號(hào),這應(yīng)該可以反映出引起錯(cuò)誤的SQL語句*/
 $this->line = $backtrace[$x]['line'];
 $this->file = $backtrace[$x]['file'];
}
$this->QueryText = $query->getCompiledQuery();
$this->ErrorNumber = $query->getDB()->errno();
$this->ErrorMessage = $query->getDB()->error();
/*調(diào)用超類的異常構(gòu)造器*/
parent::__construct('Query Error', 0);
}
/**
*得到查詢文本
*
* @返回字符串查詢文本
*/
public function GetQueryText()
{
 return $this->QueryText;
}
/**
*得到錯(cuò)誤號(hào)
*
* @返回字符串錯(cuò)誤號(hào)
*/
public function GetErrorNumber()
{
 return $this->ErrorNumber;
}
/**
*得到錯(cuò)誤消息
*
* @返回字符串錯(cuò)誤消息
*/
public function GetErrorMessage()
{
 return $this->ErrorMessage;
}
/**
*當(dāng)對(duì)象被轉(zhuǎn)換為一個(gè)字符串時(shí)調(diào)用。
* @返回字符串
*/
public function __toString()
{
 $output = "Query Error in {$this->file} on line {$this->line}nn";
 $output .= "Query: {$this->QueryText}n";
 $output .= "Error: {$this->ErrorMessage} ({$this->ErrorNumber})nn";

 return $output;
}
}

至此,在本節(jié)開始看到的代碼可以工作了。

五、 結(jié)論

在本文中,你看到了代理是怎樣把與查詢相聯(lián)系的DB接口映射到針對(duì)一個(gè)特定的查詢結(jié)果上的操作。DBQuery對(duì)象暴露相同的函數(shù),例如fetch_assoc(),作為DB對(duì)象。然而,這些都是針對(duì)單個(gè)查詢起作用。你還學(xué)習(xí)了如何使用定制異常來給出詳細(xì)信息—一個(gè)錯(cuò)誤發(fā)生在何時(shí)何地,以及它們怎樣更好地控制錯(cuò)誤的處理。

分享:Zend Framework 入門——頁面布局
Zend Framework 的頁面布局模塊——Zend_Layout——既可以跟 MVC 一起使用,也可以單獨(dú)使用。本文只討論與 MVC 一起使用的情況。 1. 布局腳本 在 application/views 下

共5頁上一頁12345下一頁
來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2008-08-22
相關(guān)PHP教程