《PHP設計模式介紹》第十四章 動態記錄模式(5)_PHP教程
推薦:《PHP設計模式介紹》第十三章 適配器模式接口的改變,是一個需要程序員們必須(雖然很不情愿)接受和處理的普遍問題。程序提供者們修改他們的代碼;系統庫被修正;各種程序語言以及相關庫的發展和進化。我孩子的無數玩具中有一個簡要地描
以下代碼實現上述實驗的要求。
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設計模式介紹》第十四章 動態記錄模式(5)。