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 ...
随机推荐
- C# 视频流操作
发送视频流 void SendVideoBuffer(object bufferIn) { try { TcpClient tcp = ); NetworkStream ns = tcp.GetStr ...
- Visual Studio 2012 Update 4 RC 启动调试失败解决方案
以下解决办法适用于任何Visual Studio开发环境,及Windows NT 6.1以上系统. 系统:Windows 8.1 Enterprise x64 RTM 开发环境:Visual Stud ...
- iOS阶段学习第14天笔记(NSString与NSMutableString)
iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...
- 初识Oracle数据库的基本操作
SQL> --切换用户 SQL> connect practice/ 已连接. SQL> --查询学生表信息 SQL> select * from stuInfo; STUNO ...
- Oracle-- (RANK) 排名函数
内容来自: Oracle® Database SQL Language Reference 11g Release 2 (11.2) E41084-03. empolyees表来自hr方案. RANK ...
- 孙鑫MFC学习笔记13:文档
1.CArchive类保存内存数据 2.CAchive类重载了>>与<<操作符,类似C++文件流 3.在OnNewDocument中通过SetTitle设置标题 4.字符串资源 ...
- 设置MySQL服务自动运行
一般情况下,MySQL安装以后是自动运行的,不知道我这台机器是什么原因,MySQL不能自动运行,每次开机后都要手动运行mysqld.exe,比较麻烦,于是用以下方法将MySQL自动启动: 1. 运行c ...
- 【Java每日一题】20161202
20161201问题解析请点击今日问题下方的"[Java每日一题]20161202"查看 package Dec2016; public class Ques1202 { publ ...
- 基于Typecho CMS框架开发大中型应用
基于Typecho CMS框架开发大中型应用 大中型应用暂且定义为:大于等于3个数据表的应用!汗吧! Typecho原本是一款博客系统,其框架体系有别于市面上一般意义MVC框架,主体代码以自创的Wid ...
- structs常见错误
原因:打开struts-default.xml文件 解决办法: 重启Myeclipse