导航菜单
首页 > 网络编程 > PHP编程 » 正文

PHP实现的数据对象映射模式详解

后台-系统设置-扩展变量-手机广告位-内容正文顶部
这篇文章主要介绍了PHP实现的数据对象映射模式,结合实例形式分析了php数据对象映射模式的原理、实现步骤及相关操作技巧,需要的朋友可以参考下

本文实例讲述了PHP实现的数据对象映射模式。分享给大家供大家参考,具体如下:

还是代码说话:这里还是遵循策略模式的psr-0代码规范

数据表:

数据库连接文件Db.php(如果没有可以到前面一篇《PHP单例模式数据库连接类与页面静态化》里面找)
自动加载类文件Config.php(如果没有可以去上一篇《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 = https://www.jb51.net/article/$res->fetch(PDO::FETCH_ASSOC);'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个对象都是一样的,这是因为我们使用了注册器模式。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • 浅析php设计模式之数据对象映射模式
  • PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
  • php中安全模式safe_mode配置教程
  • PHP设计模式之观察者模式(Observer)详细介绍和代码实例
收藏此文 赞一个 ( ) 打赏本站

如果本文对你有所帮助请打赏本站

  • 打赏方法如下:
  • 支付宝打赏
    支付宝扫描打赏
    微信打赏
    微信扫描打赏
后台-系统设置-扩展变量-手机广告位-内容正文底部

相关推荐:

留言与评论(共有 0 条评论)
   
验证码:
二维码