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之第三天
Oct 09 PHP
PHP4在Windows2000下的安装
Oct 09 PHP
PHP+MySQL投票系统的设计和实现分享
Sep 23 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
ThinkPHP中session函数详解
Sep 14 PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 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面向对象法则
2012/02/23 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
php实现数据库的增删改查
2017/02/26 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
Python中的TCP socket写法示例
2018/05/11 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
Python对象的属性访问过程详解
2020/03/05 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
大专毕业生自我评价分享
2013/11/10 职场文书
计算机毕业大学生推荐信
2013/12/01 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
教代会闭幕词
2015/01/28 职场文书
应聘教师求职信范文
2015/03/20 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript