【数据对象映射模式】

是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作。例如在代码中 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)数据对象映射模式相关推荐

  1. PHP 设计模式之数据对象映射模式

    <?php// 数据对象映射模式 class User {public $id;public $name;public $mobile;public $regtime;private $data ...

  2. Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法

    Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法 把开发手册理了一遍,发现还有几个点没有记录下来,其中一个就是使用点对的粗对齐和使用参考目标的精确对齐.为了把这个学习笔记凑够 ...

  3. 【Java学习笔记七】常用数据对象之数组

    同一般的对象创建和定义一样,数组的定义和创建可以分开进行也可以合并一起进行. 一维数组定义格式: <元素类型>[] <数组名>;//[]也可以放在数组名的后面 一维数组创建格式 ...

  4. 【Java学习笔记六】常用数据对象之String

    字符串 在Java中系统定义了两种类型的字符串类:String和StringBuffer String类对象的值和长度都不能改变,称为常量字符串类,其中每个值称为常量字符串. StringBuffer ...

  5. PHP 设计模式 笔记与总结(8)策略模式

    ① 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式. ② 实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示 ...

  6. R语言数据对象与运算

    R语言数据对象与运算 笔记整理 2.1 数据对象及类型 R语言创建和控制的实体被称为对象(object) ls()命令来查看当前系统里的数据对象 R对象的名称必须以一个英文字母打头,并由一串大小写字母 ...

  7. 《数据挖掘导论》- 读书笔记(3)- 数据

    本文转载自:https://www.cnblogs.com/pythonMLer/p/5751516.html 第2章 数据 本章讨论一些与数据相关的问题,对于数据挖掘的成本至关重要. 数据类型 数据 ...

  8. VHDL的数据对象(学习笔记1)

    VHDL语言数据对象 VHDL语言学习笔记(一):数据对象 内容:本文主要介绍VHDL语言的三种主要数据对象,即常量(constant).变量(variable)和信号(signal). 文章目录 V ...

  9. CAN笔记(21) 服务数据对象

    CAN笔记(21) 服务数据对象 1. 服务数据对象 2. 通讯原则 3. 快速 SDO 协议 4. 普通 SDO 协议 1. 服务数据对象 在 CAN笔记(17) 预定义报文ID 提及到: 服务数据 ...

最新文章

  1. mysql数据库中nchar_MySQL数据库中CHAR与VARCHAR之争
  2. libcurl 编程进度条和range请求源码示例
  3. Java事件处理机制和适配器
  4. 客户信贷应收总额相关
  5. php 文件位置获取
  6. 序列变换(Lis变形)
  7. jquery 使用方法
  8. 联想m7400pro更换墨粉盒怎么清零_佳能打印机怎么换墨水 佳能打印机换墨水注意事项【详解】...
  9. Python hashlib模块中的sha加密
  10. Python精确指南——第三章 Selenium和爬虫
  11. NSRunLoop 概述和原理
  12. matlab字符串转换
  13. stata学习笔记(三):计算五年内的ROA标准差所用到的一些知识
  14. 工程线性代数 matlab版,工程线性代数(MATLAB版)
  15. 本工具仅仅交流之用,把黑群晖洗白用,如果对此感兴趣请支持正版,请勿用于违法,作者不承担法律和相关连带责任,工具内有详细sn算号器,可供使用还有教程
  16. 伊斯坦布尔之旅第一天:蓝色清真寺和圣索菲亚博物馆
  17. 谷歌浏览器 chrome 71版本以上 设置默认允许flash
  18. RHCE--红帽考题题库(2020.07最后7版本考试,9.1开始考红帽8)
  19. NET MVC5第三方验证——FluentValidation
  20. 权重衰减/权重衰退——weight_decay

热门文章

  1. rtklib 天线相位中心_基于传输线匹配理论的OAM透射阵天线设计
  2. 计算机音乐情深深雨蒙蒙,情深深雨蒙蒙 MIDI File Download :: MidiShow
  3. 安川g7接线端子图_西门子SIWAREX称重模块安装接线注意事项!
  4. 博途v13打开软件时显示连接不到服务器,TIA博途V13软件在打开程序过程中出现以下这种情况,怎么回事?...
  5. python判断素数的函数_如何用python求素数
  6. ssh 登陆mysql数据库_mysql命令行客户端如何通过ssh服务器连接数据库啊?
  7. java aqs源码_Java-AQS源码详解(细节很多!)
  8. 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别
  9. mxnet中symbol的网络结构输出(参数维度,和每层输出维度)
  10. 基于曲率的体素聚类的三维激光雷达点云实时鲁棒分割方法