PHP数据对象映射模式
来源:互联网 发布:windows串口编程实例 编辑:程序博客网 时间:2024/04/19 12:33
还是代码说话:这里还是遵循策略模式的psr-0代码规范
数据表:
数据库连接文件Db.php(如果没有可以去我的博客里面找)
自动加载类文件Config.php(如果没有可以去上一篇博客里拿过来)
入口文件DataUser.php
<?phpdefine('BASEDIR', __DIR__);//自动加载在本文件中没有被定义的类require 'Config.php';spl_autoload_register('Config::autolad');//获取数据$user = new Data(1);var_dump($user->id, $user->name, $user->money);//如果想要修改数据$user->id = 1;$user->name = 'zhangjianping';$user->money = 10000;?>
获取数据的文件Data.php
<?phpclass Data{//数据项public $id;public $name;public $money;//数据库连接对象protected $con;//查询数据的构造函数public function __construct($id){ //连接数据库 $this->con = DB::getInstance()->connect(); //查询数据 $res = $this->con->query('select * from account where id = '.$id.' limit 1'); $data = $res->fetch(PDO::FETCH_ASSOC); //把取出来的数据项存储起来 $this->id = $data['id']; $this->name = $data['name']; $this->money = $data['money']; }//修改数据的析构函数public function __destruct(){ $this->con->query("update account set name = '{$this->name}', 'money = {$this->money}' where id = {$this->id}");}}?>
下面我们就使用工厂模式,注册树模式,数据对象映射模式来完善一下这个例子
数据库连接文件Db.php
自动加载类文件Config.php
获取数据的文件Data.php
我们将原来的入口文件改一下:
DataUser.php
<?phpdefine('BASEDIR', __DIR__);require 'Config.php';spl_autoload_register(Config::autoload);class DataUser{ public function index() { //使用工厂模式来生成对象 $user = Factory::getUser(1); var_dump($user->id); $this->name(); $this->money(); } public function name() { $user = Factory::getUser(1); var_dump($user->name); } public function money() { $user = Factory::getUser(1); var_dump($user->money); }}?>
工厂类Factory.php
<?phpclass Factory{ static function getUser($id) { //这里使用注册器模式,不然的话,在上面的文件中,使用工厂模式生成对象得时候就会多次创建对象,很占用资源 //根据id不同插入到注册树对象中 $key = 'user_'.$id; //从注册器中取出对象 $user = Register::get($key); //如果注册器中没有就创建一个对象并注册上去 if(!isset($user)) { $user = new Data($id); $user = Register::set($key, $user); } return $user; }}?>
注册器类Register.php
<?phpclass Register{ //存储对象得变量 protected static $object; //注册入注册器 public static function set($key, $value) { self::$object[$key] = $value; } //从注册器中取出 public static function get($key) { return self::$object[$key]; } //从注册器中删除 public static function _unset($key) { unset(self::$object[$key]); }}?>
如果这时候我们将Data.php修改为Data1.php,那么在不使用工厂模式的时候就要一个一个的去修改类名,现在只需要在工厂模式中修改一下就好了,我们也可以打印出每一个对象,这时候我们会发现这3个对象都是一样的,这是因为我们使用了注册器模式。
0 0
- PHP数据对象映射模式
- PHP 设计模式之数据对象映射模式
- 数据对象映射模式
- php模式-数据映射模式
- 慕课网----大话PHP设计模式 四(适配器模式,数据对象映射模式,观察者模式)
- 7.数据对象映射模式
- PHP数据对象映射模式与实现简单的链式操作
- 《数据访问模式》笔记:对象/关系映射
- PHP 数据访问对象模式
- PHP设计模式--数据访问对象模式
- PHP设计模式 三 (适配器 代理模式 数据映射)
- php 设计模式-数据映射模式(应用程序与数据库交互模式)
- [介绍]PHP设计模式:DAO(数据访问对象模式)
- [介绍]PHP设计模式:DAO(数据访问对象模式)
- [介绍]PHP设计模式:DAO(数据访问对象模式)
- PHP设计模式系列 - 数据访问对象模式
- PHP设计模式-数据访问对象模式
- PHP设计模式-数据访问对象模式
- updateByPrimaryKey和updateByPrimaryKeySelective insert和insertSelective
- 没有国家,你什么也不是
- Oracle学习笔记(二十二)——块
- 8款效果精美的 jQuery 加载动画和进度条插件
- HTML5 --Web Workers
- PHP数据对象映射模式
- UIGestureRecognizer介绍
- Pixhawk之姿态解算篇(4)_补充篇
- 部分和问题
- 大数据时代,为什么使用Spark框架?
- 基于MT7688模块的开发笔记1——关于Ubuntu版本
- flex布局
- FZU2216
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener