php 动态数据映射对象_浅析php设计模式之数据对象映射模式

php中的设计模式中有很多的各种模式了,在这里我们来为各位介绍一个不常用的数据映射模式吧,希望文章能够帮助到各位。

数据映射模式使您能更好的组织你的应用程序与数据库进行交互。

数据映射模式将对象的属性与存储它们的表字段间的结合密度降低。数据映射模式的本质就是一个类,它映射或是翻译类的属性或是方法到数据库的相应字段,反之亦然。

数据映射的作用(工作)就在于能对双方所呈现出的信息的理解,并能对信息的存取进行控制,如根据存储在数据表中的信息

重建新的域对象,或是用域对象的信息来更新或删除数据表中的相关数据。

对于面向对象代码与数据库表和字段间的映射关系的存储有多种实现方式。其中一种可能的方法就通过手工编码将这种映射关系存储在数据映射类中。

另一种可选的方法是用PHP的数组并将其编码为类本身。这个类也能外源获取数据,如INI或是XML文件。

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

在代码中实现数据对象映射模式,实现一个ORM类,将复杂的sql语句映射成对象属性的操作。对象关系映射(Object Relational Mapping,ORM)

ha_cl表

5c2989f74902049e27b08071e77c7e25.png

Hacl.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

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

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设计模式之数据对象映射模式,希望对大家有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值