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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
PHP实现两种排课方式
Jun 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
Php部分常见问题总结
2006/10/09 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP解析RSS的方法
2015/03/05 PHP
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
小程序实现tab标签页
2020/11/16 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
详解Python用户登录接口的方法
2019/04/17 Python
python频繁写入文件时提速的方法
2019/06/26 Python
python tkinter控件布局项目实例
2019/11/04 Python
Python 如何测试文件是否存在
2020/07/31 Python
python+opencv实现车道线检测
2021/02/19 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
养成教育经验材料
2014/05/26 职场文书
行政管理专业求职信
2014/07/06 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
电影红河谷观后感
2015/06/11 职场文书
同学聚会祝酒词
2015/08/10 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL