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 相关文章推荐
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
基础的WordPress插件制作教程
Nov 24 PHP
php使用glob函数遍历文件和目录详解
Sep 23 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
thinkPHP模板引擎用法示例
Dec 08 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 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
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python进行文件对比的方法
2018/12/24 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
广州盈通面试题
2015/12/05 面试题
完美主义个人的自我评价
2014/02/17 职场文书
股份合作协议书
2014/04/12 职场文书
大学毕业生推荐信
2014/07/09 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
三严三实心得体会范文
2014/10/13 职场文书
教师自荐信范文
2015/03/06 职场文书