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
用PHP和ACCESS写聊天室(六)
Oct 09 PHP
php获取网页内容方法总结
Dec 04 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
javascript 常用方法总结
2009/06/03 Javascript
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
公司前台辞职报告
2014/01/19 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
大学生秋游活动方案
2014/02/17 职场文书
介绍信格式
2015/01/30 职场文书
社区重阳节活动总结
2015/03/24 职场文书
师德培训心得体会2016
2016/01/09 职场文书
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫