《PHP设计模式介绍》第十四章 动态记录模式(2)_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:《PHP设计模式介绍》第十三章 适配器模式
接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。我孩子的无数玩具中有一个简要地描

更进一步,你应做一些对setup()方法的较为全面的测试(并多学习一些关于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()方法在成功执行后将返回一个ADORecordSet 对象,这个对象有一个recordCount()方法,这个方法可以验证表是否为空。记录集对象还有一些方法去浏览记录集元数据和fetchField()方法来效验表结构。

记录建立

在连接到数据库后,您的“创建,读取,更新,删除”(CRUD)程序就能在数据库中进行相关的行操作。


CRUD

CRUD 是创建,读取,更新,删除的缩写. 这些都是数据库交互式应用系统的基础

许多PHP WEB使用都是CRUD界面应用的示例

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

下面的示例应用是将一些书签存入数据库,因此我们将这个动态记录类命名为Bookmark。要建立一个新的书签,可使用new方法建立一个该类的实例,并设定实例的相关属性。当所有的属性都已设定(强制性),我们使用save()方法将其存入到数据库中。

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()方法。当实例被保存到数据库后,getid()方法可以返回指定给它的数据库记录号(ID)。

下面是Bookmark类的属性定义

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

让我们转向研究save()方法。它需要一个数据库连接,因此我们在构造函数中用DB::conn()连接工厂实现。

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


$conn 现在就成为适合save()方法的数据库连接了。

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 驱动支持按位置的参数替换功能,并且能正确的引用(按类型加引号)参数。SQL的形参以问号(?)的形式指定,你可以在execute()方法的第二个参数的位置,以数组的形式传递实参值到SQL语句中来替换以问号点位的形参。

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

分享:《PHP设计模式介绍》第十二章 装饰器模式
若你从事过面向对象的php开发,即使很短的时间或者仅仅通过本书了解了一些,你会知道,你可以 通过继承改变或者增加一个类的功能,这是所有面向对象语言的一个基本特性。如果已经存在的一个php

来源:模板无忧//所属分类:PHP教程/更新时间:2008-08-22
相关PHP教程