浅析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 相关文章推荐
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
php中header设置常见文件类型的content-type
Jun 23 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
注意!PHP 7中不要做的10件事
Sep 18 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 01 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 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学习之 循环结构实现代码
2011/06/09 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
Python request中文乱码问题解决方案
2020/09/17 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
阅兵口号
2014/06/19 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
于丹论语心得观后感
2015/06/15 职场文书