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 相关文章推荐
全文搜索和替换
Oct 09 PHP
php一些公用函数的集合
Mar 27 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
PHP实现文件上传功能实例代码
May 18 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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/04 日漫
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
JS实现多选框的操作
2020/06/24 Javascript
python把1变成01的步骤总结
2019/02/27 Python
wxPython多个窗口的基本结构
2019/11/19 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
vivo智能手机官方商城:vivo
2016/09/22 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
大学生求职信范文
2014/05/24 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
给上级领导的感谢信
2015/01/22 职场文书
会计专业求职信范文
2015/03/19 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python