PHP 设计模式 笔记与总结(9)数据对象映射模式
生活随笔
收集整理的這篇文章主要介紹了
PHP 设计模式 笔记与总结(9)数据对象映射模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【數據對象映射模式】
是將對象和數據存儲映射起來,對一個對象的操作會映射為對數據存儲的操作。例如在代碼中 new 一個對象,使用數據對象映射模式就可以將對象的一些操作比如設置一些屬性,就會自動保存到數據庫,跟數據庫中表的一條記錄對應起來。
?
【代碼實現】
在代碼中實現數據對象映射模式,我們將實現一個 ORM(對象關系映射?Object Relational Mapping) 類,將復雜的 SQL 語句映射成對象屬性的操作。同時結合【工廠模式】和【注冊模式】使用。
?
【例1】
數據庫 test ,user 表結構:
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) CHARACTER SET utf8 DEFAULT NULL,`mobile` varchar(11) CHARACTER SET utf8 DEFAULT NULL,`regtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
?
Common\User.php:
<?php namespace Common;class User{public $id;public $name;public $mobile;public $regtime;protected $db;//構造方法function __construct($id) {$this->db = new Database\MySQLi();$conn = $this->db->connect('127.0.0.1', 'root', '', 'test');$res = $this->db->query("select * from user where id = {$id} limit 1");$data = $res->fetch_assoc();$this->id = $data['id'];$this->name = $data['name'];$this->mobile = $data['mobile'];$this->regtime = $data['regtime'];}//析構方法function __destruct() {$this->db->query("update user set name = '{$this->name}', mobile = '{$this->mobile}', regtime = '{$this->regtime}' where id = {$this->id} limit 1");} }
?
Common\Databases\MySQLi.php
<?php namespace Common\Database; use Common\IDatabase;class MySQLi implements IDatabase{protected $conn;function connect($host, $user, $passwd, $dbname){$conn = mysqli_connect($host, $user, $passwd ,$dbname);$this->conn = $conn;}function query($sql){$res = mysqli_query($this->conn, $sql);return $res;}function close(){mysqli_close($this->conn);} }
?
入口文件 index.php
1 <?php 2 define('BASEDIR',__DIR__); //定義根目錄常量 3 include BASEDIR.'/Common/Loader.php'; 4 spl_autoload_register('\\Common\\Loader::autoload'); 5 echo '<meta http-equiv="content-type" content="text/html;charset=utf8">'; 6 7 /* 8 * 對對象屬性的操作就完成了對數據庫的操作 9 */ 10 $user = new Common\User(1); 11 12 //讀取數據 13 var_dump($user->id, $user->mobile, $user->name, $user->regtime);exit(); 14 15 $user->mobile = '13800138000'; 16 $user->name = 'Arshavin'; 17 $user->regtime = date("Y-m-d H:i:s",time());
line 13 輸出(原始表中的數據):
string '1' (length=1) string '10086' (length=5) string 'K6' (length=2) string '2015-05-07 00:16:12' (length=19)
注釋 line 13,訪問入口文件,則數據庫的數據被修改
?
轉載于:https://www.cnblogs.com/dee0912/p/4483704.html
總結
以上是生活随笔為你收集整理的PHP 设计模式 笔记与总结(9)数据对象映射模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知晚是谁唱的啊?
- 下一篇: 初学Hadoop之图解MapReduce