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)数据对象映射模式相关推荐
- PHP 设计模式之数据对象映射模式
<?php// 数据对象映射模式 class User {public $id;public $name;public $mobile;public $regtime;private $data ...
- Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法
Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法 把开发手册理了一遍,发现还有几个点没有记录下来,其中一个就是使用点对的粗对齐和使用参考目标的精确对齐.为了把这个学习笔记凑够 ...
- 【Java学习笔记七】常用数据对象之数组
同一般的对象创建和定义一样,数组的定义和创建可以分开进行也可以合并一起进行. 一维数组定义格式: <元素类型>[] <数组名>;//[]也可以放在数组名的后面 一维数组创建格式 ...
- 【Java学习笔记六】常用数据对象之String
字符串 在Java中系统定义了两种类型的字符串类:String和StringBuffer String类对象的值和长度都不能改变,称为常量字符串类,其中每个值称为常量字符串. StringBuffer ...
- PHP 设计模式 笔记与总结(8)策略模式
① 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式. ② 实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示 ...
- R语言数据对象与运算
R语言数据对象与运算 笔记整理 2.1 数据对象及类型 R语言创建和控制的实体被称为对象(object) ls()命令来查看当前系统里的数据对象 R对象的名称必须以一个英文字母打头,并由一串大小写字母 ...
- 《数据挖掘导论》- 读书笔记(3)- 数据
本文转载自:https://www.cnblogs.com/pythonMLer/p/5751516.html 第2章 数据 本章讨论一些与数据相关的问题,对于数据挖掘的成本至关重要. 数据类型 数据 ...
- VHDL的数据对象(学习笔记1)
VHDL语言数据对象 VHDL语言学习笔记(一):数据对象 内容:本文主要介绍VHDL语言的三种主要数据对象,即常量(constant).变量(variable)和信号(signal). 文章目录 V ...
- CAN笔记(21) 服务数据对象
CAN笔记(21) 服务数据对象 1. 服务数据对象 2. 通讯原则 3. 快速 SDO 协议 4. 普通 SDO 协议 1. 服务数据对象 在 CAN笔记(17) 预定义报文ID 提及到: 服务数据 ...
最新文章
- mysql数据库中nchar_MySQL数据库中CHAR与VARCHAR之争
- libcurl 编程进度条和range请求源码示例
- Java事件处理机制和适配器
- 客户信贷应收总额相关
- php 文件位置获取
- 序列变换(Lis变形)
- jquery 使用方法
- 联想m7400pro更换墨粉盒怎么清零_佳能打印机怎么换墨水 佳能打印机换墨水注意事项【详解】...
- Python hashlib模块中的sha加密
- Python精确指南——第三章 Selenium和爬虫
- NSRunLoop 概述和原理
- matlab字符串转换
- stata学习笔记(三):计算五年内的ROA标准差所用到的一些知识
- 工程线性代数 matlab版,工程线性代数(MATLAB版)
- 本工具仅仅交流之用,把黑群晖洗白用,如果对此感兴趣请支持正版,请勿用于违法,作者不承担法律和相关连带责任,工具内有详细sn算号器,可供使用还有教程
- 伊斯坦布尔之旅第一天:蓝色清真寺和圣索菲亚博物馆
- 谷歌浏览器 chrome 71版本以上 设置默认允许flash
- RHCE--红帽考题题库(2020.07最后7版本考试,9.1开始考红帽8)
- NET MVC5第三方验证——FluentValidation
- 权重衰减/权重衰退——weight_decay
热门文章
- rtklib 天线相位中心_基于传输线匹配理论的OAM透射阵天线设计
- 计算机音乐情深深雨蒙蒙,情深深雨蒙蒙 MIDI File Download :: MidiShow
- 安川g7接线端子图_西门子SIWAREX称重模块安装接线注意事项!
- 博途v13打开软件时显示连接不到服务器,TIA博途V13软件在打开程序过程中出现以下这种情况,怎么回事?...
- python判断素数的函数_如何用python求素数
- ssh 登陆mysql数据库_mysql命令行客户端如何通过ssh服务器连接数据库啊?
- java aqs源码_Java-AQS源码详解(细节很多!)
- 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别
- mxnet中symbol的网络结构输出(参数维度,和每层输出维度)
- 基于曲率的体素聚类的三维激光雷达点云实时鲁棒分割方法