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

《PHP設(shè)計(jì)模式介紹》第十五章 表數(shù)據(jù)網(wǎng)關(guān)模式(2)_PHP教程

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

推薦:《PHP設(shè)計(jì)模式介紹》第十四章 動(dòng)態(tài)記錄模式
到目前為止,您所看到的這些設(shè)計(jì)模式大大提高了代碼的可讀性與可維護(hù)性。然而,在WEB應(yīng)用設(shè)計(jì)與開發(fā)中一個(gè)基本的需求與挑戰(zhàn):數(shù)據(jù)庫應(yīng)用,這些設(shè)計(jì)模式都沒有涉及到。本章與接下來的兩章—

以數(shù)組形式返回記錄集

無論什么時(shí)候?qū)崿F(xiàn)一個(gè)表數(shù)據(jù)網(wǎng)關(guān)類,你都要選擇一種數(shù)據(jù)結(jié)構(gòu)來呈現(xiàn)從相關(guān)方法中獲取的數(shù)據(jù)集。PHP中常用于表示此數(shù)據(jù)結(jié)構(gòu)的術(shù)語是返回行的哈稀向量(以0為起始的數(shù)組),就是一個(gè)關(guān)聯(lián)數(shù)組,由字段=>值成對(duì)組成。

在BookmarkGateway通過ADOconnection獲得這樣一個(gè)數(shù)據(jù)結(jié)構(gòu)是很簡單的,因?yàn)锳DOResultSet::getArray()方法幾乎采用的是相同的術(shù)語來表示(即返回一個(gè)關(guān)聯(lián)數(shù)組)。

例如,這里findAll()可方法返回整個(gè)表數(shù)據(jù)網(wǎng)關(guān)類中表的內(nèi)容。

class BookmarkGateway {
// ...
public function findAll() {
$rs = $this->conn->execute(‘select * from bookmark’);
if ($rs) {
return $rs->getArray();
} else {
trigger_error(‘DB Error: ‘.$this->conn->errorMsg());
}
}
}

簡單與否,都需要測(cè)試一下:

class TableDataGatewayTestCase extends BaseTestCase {
// ...
function testFindAll() {
$gateway = new BookmarkGateway(DB::conn());
$this->addSeveralBookmarks($gateway);
$result = $gateway->findAll();
$this->assertIsA($result, ‘Array’);
$this->assertEqual(5, count($result));
}
}

如果你想做得更多,你可以檢查一下返回的每一行。

class TableDataGatewayTestCase extends BaseTestCase {
// ...
function testFindAll() {
$gateway = new BookmarkGateway(DB::conn());
$this->addSeveralBookmarks($gateway);
$result = $gateway->findAll();
$this->assertIsA($result, ‘Array’);
$this->assertEqual(5, count($result));
$this->assertIsA($result[0], ‘Array’);
$this->assertEqual(7, count($result[1]));
$expected_keys = array(
‘id’
,’url’
,’name’
,’description’
,’tag’
,’created’
,’updated’);
$this->assertEqual(
$expected_keys
,array_keys($result[3]));
}
}

(索引0,1,和3 都是隨機(jī)選的,可以是返回的五行中的任意一行),因?yàn)樵诜祷氐募现械闹凳悄愠跏蓟瘯r(shí)存儲(chǔ)的值(假設(shè)是這樣),你也能建立一個(gè)實(shí)驗(yàn)來直接對(duì)數(shù)據(jù)值進(jìn)行比較。

class TableDataGatewayTestCase extends BaseTestCase {
// ...
function testFindAll() {
$gateway = new BookmarkGateway(DB::conn());
$this->addSeveralBookmarks($gateway);
$result = $gateway->findAll();
// ...
$this->assertEqual(‘PHP homepage’, $result[1][‘name’]);
$this->assertEqual(‘http://google.com/’, $result[3][‘url’]);
}
}

返回可迭代的對(duì)象集合

數(shù)組是PHP內(nèi)置的數(shù)據(jù)類型,并且PHP提供了大量的數(shù)組函數(shù),使得在你的程序中使用數(shù)組非常方便。然而,你有可能希望以對(duì)象而不是數(shù)組的形式返回結(jié)果集。實(shí)際上,返回?cái)?shù)據(jù)載體對(duì)象(數(shù)據(jù)的基本容器,也包含業(yè)務(wù)邏輯)的集合是很尋常的,ADOResultSET()方法恰好證實(shí)了這一點(diǎn)。讓我們建立一個(gè)查找方法,可根據(jù)“tag”字段的值來查詢數(shù)據(jù),因?yàn)檫@個(gè)例子基于PHP5,讓我們也要求返回的結(jié)果集可迭代(參見第八章,迭代模式),用PHP的foreach結(jié)構(gòu)就能使用該結(jié)果集了。

分享:《PHP設(shè)計(jì)模式介紹》第十三章 適配器模式
接口的改變,是一個(gè)需要程序員們必須(雖然很不情愿)接受和處理的普遍問題。程序提供者們修改他們的代碼;系統(tǒng)庫被修正;各種程序語言以及相關(guān)庫的發(fā)展和進(jìn)化。我孩子的無數(shù)玩具中有一個(gè)簡要地描

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