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

《PHP設(shè)計模式介紹》第十四章 動態(tài)記錄模式(2)_PHP教程

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

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

更進一步,你應(yīng)做一些對setup()方法的較為全面的測試(并多學(xué)習(xí)一些關(guān)于ADOConnection API的實例)

class ActiveRecordTestCase extends UnitTestCase {
// ...
function testSetupLeavesTableEmptyWithCorrectStructure() {
$rs = $this->conn->execute(‘select * from bookmark’);
$this->assertIsA($rs, ‘ADORecordSet’);
$this->assertEqual(0,$rs->recordCount());
foreach(array(
‘id’,
‘url’,
‘name’,
‘description’,
‘tag’,
‘created’,
‘updated’) as $i => $name) {
$this->assertEqual($name, $rs->fetchField($i)->name);
}
}
}

即使你不太熟悉ADOdb,你也能正確的認識到execute()方法在成功執(zhí)行后將返回一個ADORecordSet 對象,這個對象有一個recordCount()方法,這個方法可以驗證表是否為空。記錄集對象還有一些方法去瀏覽記錄集元數(shù)據(jù)和fetchField()方法來效驗表結(jié)構(gòu)。

記錄建立

在連接到數(shù)據(jù)庫后,您的“創(chuàng)建,讀取,更新,刪除”(CRUD)程序就能在數(shù)據(jù)庫中進行相關(guān)的行操作。


CRUD

CRUD 是創(chuàng)建,讀取,更新,刪除的縮寫. 這些都是數(shù)據(jù)庫交互式應(yīng)用系統(tǒng)的基礎(chǔ)

許多PHP WEB使用都是CRUD界面應(yīng)用的示例

(http://c2.com/cgi/wiki?CrudScreen).

下面的示例應(yīng)用是將一些書簽存入數(shù)據(jù)庫,因此我們將這個動態(tài)記錄類命名為Bookmark。要建立一個新的書簽,可使用new方法建立一個該類的實例,并設(shè)定實例的相關(guān)屬性。當(dāng)所有的屬性都已設(shè)定(強制性),我們使用save()方法將其存入到數(shù)據(jù)庫中。

class ActiveRecordTestCase extends UnitTestCase {
// ...
function testNew() {
$link = new Bookmark;
$link->url = ‘http://simpletest.org/’;
$link->name = ‘SimpleTest’;
$link->description = ‘SimpleTest project homepage’;
$link->tag = ‘testing’;
$link->save();
$this->assertEqual(1, $link->getId());
}
}

從這個實驗中我們看到,Bookmark類有一些公共的屬性與一個save()方法。當(dāng)實例被保存到數(shù)據(jù)庫后,getid()方法可以返回指定給它的數(shù)據(jù)庫記錄號(ID)。

下面是Bookmark類的屬性定義

class Bookmark {
public $url;
public $name;
public $description;
public $tag;
}

讓我們轉(zhuǎn)向研究save()方法。它需要一個數(shù)據(jù)庫連接,因此我們在構(gòu)造函數(shù)中用DB::conn()連接工廠實現(xiàn)。

class Bookmark {
protected $id;
protected $conn;
// ...
public function __construct() {
$this->conn = DB::conn();
}
}


$conn 現(xiàn)在就成為適合save()方法的數(shù)據(jù)庫連接了。

class Bookmark {
// ...
const INSERT_SQL = “
insert into bookmark (url, name, description, tag, created, updated)
values (?, ?, ?, ?, now(), now())
“;
protected function save() {
$rs = $this->conn->execute(
self::INSERT_SQL
,array($this->url, $this->name,
$this->description, $this->tag));
if ($rs) {
$this->id = (int)$this->conn->Insert_ID();
} else {
trigger_error(‘DB Error: ‘.$this->conn->errorMsg());
}
}
}

ADOdb 的 MySQL 驅(qū)動支持按位置的參數(shù)替換功能,并且能正確的引用(按類型加引號)參數(shù)。SQL的形參以問號(?)的形式指定,你可以在execute()方法的第二個參數(shù)的位置,以數(shù)組的形式傳遞實參值到SQL語句中來替換以問號點位的形參。

Insert_ID()方法可能已引起你的注意:它返回最后一次執(zhí)行插入操作時自增長列的值。

分享:《PHP設(shè)計模式介紹》第十二章 裝飾器模式
若你從事過面向?qū)ο蟮膒hp開發(fā),即使很短的時間或者僅僅通過本書了解了一些,你會知道,你可以 通過繼承改變或者增加一個類的功能,這是所有面向?qū)ο笳Z言的一個基本特性。如果已經(jīng)存在的一個php

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