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的header和asp中的redirect比较
Oct 09 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 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字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
javascript 模拟点击广告
2010/01/02 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
element中的$confirm的使用
2020/04/26 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python连接DB2数据库
2016/08/27 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
python openpyxl使用方法详解
2019/07/18 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python安装Bs4的多种方法
2020/11/28 Python
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
教师年终个人自我评价
2013/10/04 职场文书
中文专业自荐书
2014/06/29 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
党员带头倡议书
2015/04/29 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
计划生育目标责任书
2015/05/09 职场文书
小学运动会加油词
2015/07/18 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
Java获取字符串编码格式实现思路
2022/09/23 Java/Android