PHP数据对象映射模式实例分析

这篇文章主要介绍了PHP数据对象映射模式,结合实例形式分析了php数据对象模式原理、定义与相关使用方法,需要的朋友可以参考下。

本文实例讲述了PHP数据对象映射模式,分享给大家供大家参考,具体如下:

将对象和数据存储映射起来,对一个对象的操作映射为对数据存储的操作。

例如在代码中new 一个对象,使用数组对象映射模式可以将对象的一些操作,比如设置一些属性,就会自动保存到数据库,跟数据库表的一条记录对应起来

在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性的操作。同时结合工厂模式和注册模式使用

例1【例1】

数据库 test ,user 表结构:

  1. CREATE TABLE `user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(32) CHARACTER SET utf8 DEFAULT NULL,
  4. `mobile` varchar(11) CHARACTER SET utf8 DEFAULT NULL,
  5. `regtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

Common\User.php:

  1. <?php
  2. namespace Common;
  3. class User{
  4. public $id;
  5. public $name;
  6. public $mobile;
  7. public $regtime;
  8. protected $db;
  9. //构造方法
  10. function __construct($id) {
  11. $this->db = new Database\MySQLi();
  12. $conn = $this->db->connect('127.0.0.1', 'root', '', 'test');
  13. $res = $this->db->query("select * from user where id = {$id} limit 1");
  14. $data = $res->fetch_assoc();
  15. $this->id = $data['id'];
  16. $this->name = $data['name'];
  17. $this->mobile = $data['mobile'];
  18. $this->regtime = $data['regtime'];
  19. }
  20. //析构方法
  21. function __destruct() {
  22. $this->db->query("update user set name = '{$this->name}', mobile = '{$this->mobile}', regtime = '{$this->regtime}' where id = {$this->id} limit 1");
  23. }
  24. }

Common\Databases\MySQLi.php

  1. <?php
  2. namespace Common\Database;
  3. use Common\IDatabase;
  4. class MySQLi implements IDatabase{
  5. protected $conn;
  6. function connect($host, $user, $passwd, $dbname){
  7. $conn = mysqli_connect($host, $user, $passwd ,$dbname);
  8. $this->conn = $conn;
  9. }
  10. function query($sql){
  11. $res = mysqli_query($this->conn, $sql);
  12. return $res;
  13. }
  14. function close(){
  15. mysqli_close($this->conn);
  16. }
  17. }

入口文件 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. $user = new Common\User(1);
  10. //读取数据
  11. var_dump($user->id, $user->mobile, $user->name, $user->regtime);exit();
  12. $user->mobile = '13800138000';
  13. $user->name = 'Arshavin';
  14. $user->regtime = date("Y-m-d H:i:s",time());