浅析php设计模式之数据对象映射模式


Posted in PHP onMarch 03, 2016

php中的设计模式中有很多的各种模式了,在这里我们来为各位介绍一个不常用的数据映射模式吧,希望文章能够帮助到各位。

数据映射模式使您能更好的组织你的应用程序与数据库进行交互。

数据映射模式将对象的属性与存储它们的表字段间的结合密度降低。数据映射模式的本质就是一个类,它映射或是翻译类的属性或是方法到数据库的相应字段,反之亦然。

数据映射的作用(工作)就在于能对双方所呈现出的信息的理解,并能对信息的存取进行控制,如根据存储在数据表中的信息

重建新的域对象,或是用域对象的信息来更新或删除数据表中的相关数据。

对于面向对象代码与数据库表和字段间的映射关系的存储有多种实现方式。其中一种可能的方法就通过手工编码将这种映射关系存储在数据映射类中。

另一种可选的方法是用PHP的数组并将其编码为类本身。这个类也能外源获取数据,如INI或是XML文件。

数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作。

在代码中实现数据对象映射模式,实现一个ORM类,将复杂的sql语句映射成对象属性的操作。对象关系映射(Object Relational Mapping,ORM)

ha_cl表

浅析php设计模式之数据对象映射模式

Hacl.php

<?php
namespace Baobab;
class Hacl{
public $id;
public $haclname;
public $haclcode;
public $hacls;
protected $db;
function __construct($id){
$this->db = new \Baobab\Database\Mysqli();
$this->db->connect('127.0.0.1', 'root', '', 'test');
$res = $this->db->query("select * from ha_cl where id = {$id}");
$data = $res->fetch_assoc();
$this->id = $data['ID'];
$this->haclname = $data['ha_cl_name'];
$this->haclcode = $data['ha_cl_code'];
$this->hacls = $data['hacls'];
}
function __destruct(){
$this->db->query("update ha_cl set
ha_cl_code = '{$this->haclcode}',
ha_cl_name = '{$this->haclname}',
hacls = '{$this->hacls}'
where ID = {$this->id}
limit 1");
}
}

Factory.php

<?php
namespace Baobab;
class Factory{
static function getHacl($id){
$key = 'user_'.$id;
$user = \Baobab\Register::get($key);//表中id不同表示的是不同的对象
if(!$user){
$user = new \Baobab\Hacl($id);
\Baobab\Register::set($key, $user);
}
return $user;
}
}

Register.php

<?php
namespace Baobab;
class Register{
protected static $objects;
static function set($alias, $object){
self::$objects[$alias] = $object;
}
static function _unset($alias) {
unset(self::$objects[$alias]);
}
static function get($name) {
return self::$objects[$name];
}
}

index.php

class Page{
function index(){
$hacl = Baobab\Factory::getHacl(13);
$hacl->haclname = '测试名称';
$this->test();
echo 'ok';
}
function test(){
$hacl = Baobab\Factory::getHacl(13);
$hacl->hacls = '测试内容';
}
}
$page = new Page();
$page->index();

使用工厂模式会多次创建对象Hacl,浪费资源,如果将对象作为参数传递,一方面会带来额外的使用成本,另外如果很多地方都用到这个对象很容易发生错误,因此在工厂模式中使用注册树模式来解决这个问题。

以上内容给大家介绍了php设计模式之数据对象映射模式,希望对大家有所帮助!

PHP 相关文章推荐
PHP实现文件安全下载
Oct 09 PHP
php数组总结篇(一)
Sep 30 PHP
PHP session有效期问题
Apr 26 PHP
ecshop 订单确认中显示省市地址信息的方法
Mar 15 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
PHP整合PayPal支付
Jun 11 PHP
PHP实现获取文件后缀名的几种常用方法
Aug 08 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
详解php用static方法的原因
Sep 12 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 #PHP
PHP MVC框架路由学习笔记
Mar 02 #PHP
深入浅析用PHP实现MVC
Mar 02 #PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 #PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 #PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 #PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 #PHP
You might like
PHP define函数的使用说明
2008/08/27 PHP
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
numpy排序与集合运算用法示例
2017/12/15 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
Python对excel的基本操作方法
2021/02/18 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
旅游个人求职信范文
2014/01/30 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
高中军训感言600字
2014/03/11 职场文书
幼儿园新年寄语
2014/04/03 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
2014年终个人工作总结
2014/11/07 职场文书
2014年文员工作总结
2014/11/18 职场文书
学生评语集锦
2015/01/04 职场文书
超市采购员岗位职责
2015/04/07 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers