浅析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中获取变量的变量名的一段代码的bug分析
Jul 07 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
php实现以只读方式打开文件的方法
Mar 16 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
PHP实现上传图片到 zimg 服务器
Oct 19 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
PHP使用QR Code生成二维码实例
Jul 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 危险函数解释 分析
2009/04/22 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
用Python制作音乐海报
2021/01/26 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
一个大学生十年的职业规划
2014/01/17 职场文书
幼儿园开学家长寄语
2014/01/19 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
学校安全责任书
2014/04/14 职场文书
节约用水演讲稿
2014/05/21 职场文书
个人授权委托书模板
2014/09/14 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书