php设计模式 数据对象映射模式
数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作。
在代码中实现数据对象映射模式,实现一个ORM类,将复杂的sql语句映射成对象属性的操作。对象关系映射(Object Relational Mapping,ORM)
ha_cl表
aaarticlea/png;base64,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" alt="" />
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 设计模式 笔记与总结(10)数据对象映射模式 2
[例2]数据对象映射模式结合[工厂模式]和[注册模式]的使用. 入口文件 index.php: <?php define('BASEDIR',__DIR__); //定义根目录常量 includ ...
- PHP 设计模式 笔记与总结(9)数据对象映射模式
[数据对象映射模式] 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作.例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数 ...
- PHP设计模式笔记六:数据对象映射模式 -- Rango韩老师 http://www.imooc.com/learn/236
数据对象映射模式 1.数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作 2.在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性 ...
- C++设计模式 之 “对象创建”模式:Factory Method、Abstract Factory、Prototype、Builder
part 0 “对象创建”模式 通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式 Fact ...
- ASP.NET MVC 模型和数据对象映射实践
在使用 MVC 开发项目的过程中遇到了个问题,就是模型和数据实体之间的如何快捷的转换?是不是可以像 Entity Framework 的那样 EntityTypeConfiguration,或者只需要 ...
- C++设计模式 之 “对象性能” 模式:Singleton、Flyweight
“对象性能”模式 面向对象很好地解决了“抽象”的问题,但是必不可免地要付出一定的代价.对于通常情况来讲,面向对象的成本大都可以忽略不计.但是某些情况,面向对象所带来的成本必须谨慎处理. 典型模式 # ...
- GoLang设计模式06 - 对象池模式
这次介绍最后一个创建型模式--对象池模式.顾名思义,对象池模式就是预先初始化创建好多个对象,并将之保存在一个池子里.当需要的时候,客户端就可以从池子里申请一个对象使用,使用完以后再将之放回到池子里.池 ...
- 游戏开发设计模式之对象池模式(unity3d 示例实现)
前篇:游戏开发设计模式之命令模式(unity3d 示例实现) 博主才学尚浅,难免会有错误,尤其是设计模式这种极富禅意且需要大量经验的东西,如果哪里书写错误或有遗漏,还请各位前辈指正. 原理:从一个固定 ...
- Emit学习(4) - Dapper解析之数据对象映射(二)
承接着上一篇, 这一篇主要以堆栈的方式来演示一下, db数据转换到类中去的一个过程. 一.先看第一张图 程序在运行到176行(上一篇贴出的代码)的时候, 就会出现上图中的第一个栈. 那在此之前, Da ...
随机推荐
- DSOFramerControl简单使用
以前大学做项目(Web的毕业论系统)就看见过在网页中嵌入Office的word,那时候用了哪个控件当时没记下来,我倒是忘了,最近发现在WinForm要嵌入Office的话,可以使用DSOFramerC ...
- SingalR--介绍
什么是SignalR? ASP.NET SignalR是为简化开发开发人员将实时web内容添加到应用程序过程而提供的类库.实时web功能指的是让服务器代码可以随时主动推送内容给客户端,而不是让服务器等 ...
- ASPose导出excel简单操作
string file = FileDialogHelper.SaveExcel(string.Format("{0}.xls", excelName)); if (!string ...
- 使用DocX开源组件,实现动态数据的填充。
1.先解释一下,什么叫做动态数据,动态数据指的是,一条数据的格式固定,但数据的条数不固定. 2.应用环境,在一个表格当中如果,现在表格有三行n列,如果你需要在表格第一行后添加同等规格的一行或n行,应该 ...
- 基于TCP和多线程实现无线鼠标键盘-InputMethodManager
为了实现无线键盘的功能,使用了InputMethodManager弹出软键盘. // 弹出软键盘 public void pop_keyboard(){ imm = (InputMethodManag ...
- 优化JavaScripe 提升首页加载速度的几种方案解析
优化目的: 1. 减少load量. 2. 优化js,加快页面加载速度. 网站中最影响网站打开速度的是什么?我会告诉是网站中的javascript,简称JS.模板中引用的JS文件越多,打开速度越慢,细读 ...
- linux下使用forever进行管理
何为forever:forever可以看做是一个nodejs的守护进程,能够启动,停止,重启我们的app应用.官方的说明是说:A simple CLI tool for ensuring that a ...
- nodejs中全局变量
1.global 类似于客户端javascript运行环境中的window module1.js: module.exports={}; //耻辱的使用了全局变量 global.varA = &quo ...
- NotSerializableException解决方法
NotSerializableException 问题描述: 想要写入对象的时候的时候回抛出NotSerializableException:类名 原因: 写入的对象没有序列化,即没有实现java.i ...
- git node(&npm)安装
1.git 下载地址:https://git-scm.com/download/win 2.node 下载地址:https://nodejs.org/en/download/ 安装node会自带npm ...