以下代码实现上述实验的要求。
class Bookmark { |
CRUD操作中的建立与读取部分介绍完毕。何如更新数据呢?当然用save()方法来更新activate record对象是合理的,但目前save()方法只能完成插入数据,其代码如下
class Bookmark{ |
class Bookmark { // ... const UPDATE_SQL = “ update bookmark set url = ?, name = ?, description = ?, tag = ?, updated = now() where id = ? “; public function save() { $this->conn->execute( self::UPDATE_SQL ,array( $this->url, $this->name, $this->description, $this->tag, $this->id)); } } |
要区别INSERT与UPDATE,你应该测试书签数据是新建的还是从数据库中获取得的。
首先,重新制作两个版本的save()方法,分别命令为insert()与update()。
class Bookmark { |
class Bookmark { const NEW_BOOKMARK = -1; protected $id = Bookmark::NEW_BOOKMARK; // ... public function save() { if ($this->id == Bookmark::NEW_BOOKMARK) { $this->insert(); } else { $this->update(); } } } |
最后一个问题:当你插入或是更新记录时,时间戳总是要改变的。如果不采取从数据库中获取时间戳的手段,则没有更好的方法在书签对象中记录准确的时间戳了。因为在插入与修改中都要应用到,所以要更改Activate Record类,当save()方法完成后,就更新时间戳(实例的相关属性值),以避免后来产生的不同步。
延伸阅读:
从魔兽看PHP设计模式
《PHP设计模式介绍》导言
PHP设计模式介绍 第一章 编程惯用法
PHP设计模式介绍 第二章 值对象模式
PHP设计模式介绍 第三章 工厂模式
PHP设计模式介绍 第四章 单件模式
PHP设计模式介绍 第五章 注册模式
PHP设计模式介绍 第六章 伪对象模式
PHP设计模式介绍 第七章 策略模式
PHP设计模式介绍 第八章 迭代器模式