最近學了ZF框架,對手冊中DB這一節Zend_Db_Table_Row的介紹中說,使用了Zend_Db_Table::find()或::findRow()方法能夠返回一個Zend_Db_Table_Row的對象,該對象自動映射到表中的這一行記錄,字段和類屬性徹底關聯在一塊兒(字段名是下劃線分隔的,屬性名由首個單詞小寫的駝峯式命名,如自動「last_name」,則操做時屬性名「lastName」),獲取任何字段就直接像操做類屬性同樣,如:php
$row = $table->fetchRow('first_name = "Robin"');//$table是Zend_Db_Table實例
echo $row->lastName;//假設輸出‘Bill’
而修改的操做超級方便,直接對屬性賦值後調用save()方法便可,如:app
$row->lastName = 'Gates'; $row->save();
數據就會自動更新到表中。以後深究了下源碼,大體仍是邏輯有點多,因此本身理一理,這裏貼出一個簡單的集成該思路的類,按照數據對象映射的模式來思考的,能夠有助於理解。框架
<?php /** * 數據對象映射模式 * class DataMapping { protected $id; protected $data; protected $db; protected $change = false; function __construct($id) { $this->db = Factory::getDatabase(); $res = $this->db->query("select * from user where id = $id limit 1"); $this->data = $res->fetch_assoc(); $this->id = $id; } function __get($key) //實現對象操做屬性的方式來操做表字段值 { if (isset($this->data[$key])) { return $this->data[$key]; } } function __set($key, $value) //對於新的字段能夠直接更新進數據表 { $this->data[$key] = $value; $this->change = true; } function __destruct() //析構器的功能實現save()邏輯 { if ($this->change) { foreach ($this->data as $k => $v) { $fields[] = "$k = '{$v}'"; } $this->db->query("update user set " . implode(', ', $fields) . " where id = {$this->id} limit 1"); } } }