数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作。

在代码中实现数据对象映射模式,实现一个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设计模式 数据对象映射模式的更多相关文章

  1. PHP 设计模式 笔记与总结(10)数据对象映射模式 2

    [例2]数据对象映射模式结合[工厂模式]和[注册模式]的使用. 入口文件 index.php: <?php define('BASEDIR',__DIR__); //定义根目录常量 includ ...

  2. PHP 设计模式 笔记与总结(9)数据对象映射模式

    [数据对象映射模式] 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作.例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数 ...

  3. PHP设计模式笔记六:数据对象映射模式 -- Rango韩老师 http://www.imooc.com/learn/236

    数据对象映射模式 1.数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作 2.在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性 ...

  4. C++设计模式 之 “对象创建”模式:Factory Method、Abstract Factory、Prototype、Builder

    part 0 “对象创建”模式 通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式 Fact ...

  5. ASP.NET MVC 模型和数据对象映射实践

    在使用 MVC 开发项目的过程中遇到了个问题,就是模型和数据实体之间的如何快捷的转换?是不是可以像 Entity Framework 的那样 EntityTypeConfiguration,或者只需要 ...

  6. C++设计模式 之 “对象性能” 模式:Singleton、Flyweight

    “对象性能”模式 面向对象很好地解决了“抽象”的问题,但是必不可免地要付出一定的代价.对于通常情况来讲,面向对象的成本大都可以忽略不计.但是某些情况,面向对象所带来的成本必须谨慎处理. 典型模式 # ...

  7. GoLang设计模式06 - 对象池模式

    这次介绍最后一个创建型模式--对象池模式.顾名思义,对象池模式就是预先初始化创建好多个对象,并将之保存在一个池子里.当需要的时候,客户端就可以从池子里申请一个对象使用,使用完以后再将之放回到池子里.池 ...

  8. 游戏开发设计模式之对象池模式(unity3d 示例实现)

    前篇:游戏开发设计模式之命令模式(unity3d 示例实现) 博主才学尚浅,难免会有错误,尤其是设计模式这种极富禅意且需要大量经验的东西,如果哪里书写错误或有遗漏,还请各位前辈指正. 原理:从一个固定 ...

  9. Emit学习(4) - Dapper解析之数据对象映射(二)

    承接着上一篇, 这一篇主要以堆栈的方式来演示一下, db数据转换到类中去的一个过程. 一.先看第一张图 程序在运行到176行(上一篇贴出的代码)的时候, 就会出现上图中的第一个栈. 那在此之前, Da ...

随机推荐

  1. ASP.NET MVC系列:开始

    创建Asp.Net MVC项目 从visual studio主界面开始菜单中点击“新建项目”

  2. c#中的正则表达式

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. 仿Office的程序载入窗体

    初次接触启动界面记不清是在哪一年了,估计是小学四年级第一次打开Office Word的时候吧,更记不清楚当时的启动界面是长啥样了.后来随着使用的软件越来越多,也见到各式各样的启动界面.下面就列举了两个 ...

  4. winform水平滚动条联动panel

    需求: 滚动滚动条时显示pnlBack里面的button 文本框里输入数字,改变每行显示的按钮数 源码如下: /// <summary> /// 窗体加载 /// </summary ...

  5. iOS阶段学习第15天笔记(NSDictionary与NSMutableDictionary 字典)

    iOS学习(OC语言)知识点整理 一.OC中的字典 1)字典:是一个容器对象,元素是以键-值对(key-value)形式存放的,key和value是任意类型的对象,key是唯一的,value可以重复 ...

  6. MVC之前的那点事儿系列(7):WebActivator的实现原理详解

    文章内容 上篇文章,我们分析如何动态注册HttpModule的实现,本篇我们来分析一下通过上篇代码原理实现的WebActivator类库,WebActivator提供了3种功能,允许我们分别在Http ...

  7. Eclipse常用的快捷键

    Eclipse常用快捷键 1,       Ctrl+S,保存文档. 2,       Tab,多行同时右移:选中多行 3,       shlft+tab,多行同时左移,选中多行 4,       ...

  8. Firemonkey TEdit 切换不同 KeyboardType 样式

    用代码切换 Edit 不同的键盘样式: procedure TForm1.Button1Click(Sender: TObject); begin Edit1.KeyboardType := TVir ...

  9. Genymotion无法下载OVA文件

    百度 下载Genymotion离线OVA文件(http://pan.baidu.com/s/1jIe5pjC ) 将OVA离线文件放到这个目录下:C:\Users\Administrator\AppD ...

  10. jinfo命令的使用

    jinfo命令 该命令可以打印出java进程的配置信息:包括jvm参数,系统属性等用法: jinfo [ option ] pid jinfo [ option ] executable core j ...