PHP5 OOP編程中的代理與異常(3)_PHP教程
推薦:詳細(xì)介紹php5編程中的異常處理1 首先是try,catch <?php $path = "D:\\in.txt"; try //檢測(cè)異常 { file_open($path); } catch(Exception $e) //捕獲異常 { echo $e->getMessage(); } function
二、 類型提示(Type Hinting)
為了使代理能夠工作,我們需要確保DBQuery對(duì)象的$db變量是一個(gè)實(shí)現(xiàn)了DB接口的對(duì)象的實(shí)例。類型提示是PHP 5中的一種新特征,它能夠使你把函數(shù)參數(shù)強(qiáng)制轉(zhuǎn)換成特定類型的對(duì)象。在PHP 5之前,唯一的確保函數(shù)參數(shù)是一個(gè)特定對(duì)象類型的方法是使用PHP中所提供的類型檢查函數(shù)(也即是is_a())。現(xiàn)在,你可以簡(jiǎn)單地強(qiáng)制轉(zhuǎn)換對(duì)象類型—通過在函數(shù)參數(shù)的前面加上類型名。你已經(jīng)從我們的DBQuery對(duì)象中看到了類型提示,這樣可以確保一個(gè)實(shí)現(xiàn)DB接口的對(duì)象被傳遞到對(duì)象構(gòu)造器中。
public function __construct(DB $db) { $this->db = $db; } |
三、 拋出異常
你可能已經(jīng)從上面的代碼中注意到,你捕獲的是一個(gè)稱為QueryException(我們將在后面實(shí)現(xiàn)這個(gè)對(duì)象)的異常。一個(gè)異常類似于一個(gè)錯(cuò)誤,然而卻更具有一般性。描述一個(gè)異常的最好的方法是使用emergency。盡管一個(gè)emergency可以不會(huì)是“致命的”,但是還是必須處理它。當(dāng)在PHP中拋出一個(gè)異常時(shí),執(zhí)行的當(dāng)前范圍很快地被終止,不管它是一個(gè)函數(shù),try..catch塊還是腳本本身。然后,該異常遍歷調(diào)用棧—終止每個(gè)執(zhí)行范圍,直到或者在一個(gè)try..catch塊中捕獲它或者它到達(dá)調(diào)用棧的頂部—此時(shí)它將生成一個(gè)致命錯(cuò)誤。
異常處理是PHP 5中的另外一個(gè)新特征,當(dāng)與OOP聯(lián)用時(shí),它能夠?qū)崿F(xiàn)良好地控制錯(cuò)誤處理和報(bào)告。一個(gè)try..catch塊是一種處理異常的重要機(jī)制。一旦被捕獲,腳本將會(huì)從異常被捕獲和被處理的代碼的下一行繼續(xù)執(zhí)行。
如果查詢失敗,你需要改變你的execute函數(shù)以拋出一個(gè)異常。你將拋出一個(gè)稱為QueryException的定制異常對(duì)象—導(dǎo)致錯(cuò)誤的DBQuery對(duì)象被傳遞給它。
列表3.拋出一個(gè)異常。
/** *執(zhí)行當(dāng)前查詢 * * 執(zhí)行當(dāng)前查詢—用提供的參數(shù)代替任何點(diǎn)位符 * . * * @參數(shù): mixed $queryParams,... 查詢參數(shù) * @返回:資源A—參考描述執(zhí)行查詢的資源。 */ public function execute($queryParams = '') { //例如: SELECT * FROM table WHERE name=:1S AND type=:2I AND level=:3N $args = func_get_args(); if ($this->stored_procedure) { /*調(diào)用compile函數(shù)以得到查詢*/ $query = call_user_func_array(array($this, 'compile'), $args); } else { /*一個(gè)存儲(chǔ)過程沒被初始化,因此,作為一種標(biāo)準(zhǔn)查詢來(lái)執(zhí)行之*/ $query = $queryParams; } $result = $this->db->query($query); if (! $result) { throw new QueryException($this); } $this->result = $result; /* 注意現(xiàn)在我們?cè)趺捶祷貙?duì)象本身,這使我們能夠從這個(gè)函數(shù)的返回結(jié)果中調(diào)用成員函數(shù) */ return $this; } |
分享:Zend Framework 入門——頁(yè)面布局Zend Framework 的頁(yè)面布局模塊——Zend_Layout——既可以跟 MVC 一起使用,也可以單獨(dú)使用。本文只討論與 MVC 一起使用的情況。 1. 布局腳本 在 application/views 下
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- php curl的深入解析
- PHP時(shí)間戳與日期之間轉(zhuǎn)換的實(shí)例介紹
- 詳解PHP內(nèi)置訪問資源的超時(shí)時(shí)間 time_out file_get_contents read_file
- PHP實(shí)例:精確到每一秒鐘的在線人數(shù)顯示代碼
- PHP教程之入門需要掌握的幾種功能代碼
- 小荷才露尖尖角 中國(guó)的PHP社群介紹
- cmd運(yùn)行php
- 用PHP程序?yàn)樽约壕W(wǎng)站打造一個(gè)搜索引擎
- 加速動(dòng)態(tài)網(wǎng)站 MySQL索引分析和優(yōu)化
- 深入phpMyAdmin的安裝與配置的詳細(xì)步驟
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-PHP5 OOP編程中的代理與異常(3)。