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生成静态HTML速度快类库
Mar 18 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP中文乱码解决方案
Mar 05 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 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中通过smtp发邮件的类,测试通过
2007/01/22 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
JQuery 常用操作代码
2010/03/14 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
python监控键盘输入实例代码
2018/02/09 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
实习生自我鉴定
2013/12/12 职场文书
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
销售人员获奖感言
2014/02/05 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
教师节祝酒词
2015/08/11 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android