浅析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 相关文章推荐
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
ucenter通信原理分析
Jan 09 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 PHP
深入浅出php socket编程
May 13 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 PHP
TP5框架实现签到功能的方法分析
Apr 05 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强制用户转向www域名的方法
2015/06/19 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
syb养殖创业计划书
2014/01/09 职场文书
《花木兰》教学反思
2014/04/09 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
红旗渠导游词
2015/02/09 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
Python字符串常规操作小结
2022/04/03 Python