浅析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 编程请选择正确的文本编辑软件
Dec 21 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
PHP中设置时区方法小结
Jun 03 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
PHP 计算两个特别大的整数实例代码
May 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读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php之XML转数组函数的详解
2013/06/07 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
面试常见的js算法题
2017/03/23 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
Python 调用Java实例详解
2017/06/02 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Python循环实现n的全排列功能
2019/09/16 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
教师找工作推荐信
2013/11/23 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
创意活动策划书
2014/01/15 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
房产协议书范本2014
2014/09/30 职场文书
入党后的感想
2015/08/10 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
Vue操作Storage本地化存储
2022/04/29 Vue.js
MySQL 数据表操作
2022/05/04 MySQL