PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP高级编程 >> 高级应用 >> 

PHP设计模式介绍 第十四章 动态记录模式

PHP设计模式介绍 第十四章 动态记录模式

来源:互联网  作者:  发布时间:2010-05-22
到目前为止,您所看到的这些设计模式大大提高了代码的可读性与

更进一步,你应做一些对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设计模式介绍 第二章 值对象模式
PHP设计模式介绍 第三章 工厂模式
PHP设计模式介绍 第四章 单件模式
PHP设计模式介绍 第五章 注册模式
PHP设计模式介绍 第六章 伪对象模式
PHP设计模式介绍 第七章 策略模式
PHP设计模式介绍 第八章 迭代器模式
PHP设计模式介绍 第九章 观测模式
PHP设计模式介绍 第十章 规范模式
PHP设计模式介绍 第十一章 代理模式
PHP设计模式介绍 第十二章 装饰器模式
PHP设计模式介绍 第十三章 适配器模式

最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号