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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
php设计模式小结
Feb 15 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
PHP7常量数组用法分析
Sep 26 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
一段php加密解密的代码
2006/10/09 PHP
树型结构列出指定目录里所有文件的PHP类
2006/10/09 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
php输出图像的方法实例分析
2017/02/16 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python 递归函数详解及实例
2016/12/27 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
对pandas处理json数据的方法详解
2019/02/08 Python
python中import与from方法总结(推荐)
2019/03/21 Python
python将字母转化为数字实例方法
2019/10/04 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
书法比赛获奖感言
2014/02/10 职场文书
读群众路线心得体会
2014/03/07 职场文书
信息技术课后反思
2014/04/27 职场文书
经验交流材料格式
2014/12/30 职场文书
2016春节家属慰问信
2015/03/25 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python
Win11开始菜单添加休眠选项
2022/04/19 数码科技