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


Posted in PHP onMarch 29, 2019

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

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

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

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

例1

【例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

<?php
 define('BASEDIR',__DIR__); //定义根目录常量
 include BASEDIR.'/Common/Loader.php';
 spl_autoload_register('\\Common\\Loader::autoload');
 echo '<meta http-equiv="content-type" content="text/html;charset=utf8">';
 /*
 * 对对象属性的操作就完成了对数据库的操作
 */
 $user = new Common\User(1);
 //读取数据
 var_dump($user->id, $user->mobile, $user->name, $user->regtime);exit();
 $user->mobile = '13800138000';
 $user->name = 'Arshavin';
 $user->regtime = date("Y-m-d H:i:s",time());

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
php时间戳转换的示例
Mar 31 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
Oct 23 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP实现文件上传功能实例代码
May 18 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 #PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 #PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 #PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
Mar 28 #PHP
PHP微商城开源代码实例
Mar 27 #PHP
PHP简单验证码功能机制实例详解
Mar 27 #PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 #PHP
You might like
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
python的多重继承的理解
2017/08/06 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
python如何进行矩阵运算
2020/06/05 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
个人找工作自荐信格式
2013/09/21 职场文书
医学毕业生自荐信
2013/10/11 职场文书
高校毕业生自我鉴定
2013/10/27 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
对祖国的寄语大全
2014/04/11 职场文书
优质服务口号
2014/06/11 职场文书
政风行风整改报告
2014/11/06 职场文书