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设计模式中的工厂模式
Jun 12 PHP
php 删除记录实现代码
Mar 12 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
第四章 php数学运算
Dec 30 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
PHP常用的小程序代码段
Nov 14 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
PHP实现获取并生成数据库字典的方法
May 04 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
PHP字符串中抽取子串操作实例分析
Jun 22 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
JQuery select标签操作代码段
2010/05/16 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
python实现图片批量剪切示例
2014/03/25 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
python实现websocket的客户端压力测试
2019/06/25 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
总经理办公室主任岗位职责
2013/11/12 职场文书
简单英文演讲稿
2014/01/01 职场文书
2014年工商所工作总结
2014/12/09 职场文书
晚会闭幕词
2015/01/28 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL
Python PIL按比例裁剪图片
2022/05/11 Python