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 strtotime 函数UNIX时间戳
Jan 14 PHP
php绘制一条弧线的方法
Jan 24 PHP
PHP实现HTML页面静态化的方法
Nov 04 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
php读取本地json文件的实例
Mar 07 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 PHP
PHP Primary script unknown 解决方法总结
Aug 22 PHP
php的命名空间与自动加载实现方法
Aug 25 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
php头像上传预览实例代码
2017/05/02 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
python在不同层级目录import模块的方法
2016/01/31 Python
详解Swift中属性的声明与作用
2016/06/30 Python
Python中datetime模块参考手册
2017/01/13 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
Python for循环与range函数的使用详解
2019/03/23 Python
python如何基于redis实现ip代理池
2020/01/17 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
会计出纳岗位职责
2013/12/25 职场文书
信息工作经验交流材料
2014/05/28 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
公司证明怎么写
2014/09/22 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
高中班长竞选稿
2015/11/20 职场文书
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers