爱程序网

php设计模式 数据对象映射模式

来源: 阅读:

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

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

ha_cl表

Hacl.php

<?phpnamespace Baobab;class Hacl{    public $id;    public $haclname;    public $haclcode;    public $hacls;    protected $db;
function __construct($id){ $this->db = new BaobabDatabaseMysqli(); $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

<?phpnamespace Baobab;class Factory{    static function getHacl($id){        $key = 'user_'.$id;        $user = BaobabRegister::get($key);//表中id不同表示的是不同的对象        if(!$user){            $user = new BaobabHacl($id);            BaobabRegister::set($key, $user);        }        return $user;    }}

Register.php

<?phpnamespace 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 = BaobabFactory::getHacl(13);        $hacl->haclname = '测试名称';        $this->test();        echo 'ok';    }    function test(){        $hacl = BaobabFactory::getHacl(13);        $hacl->hacls = '测试内容';    }}$page = new Page();$page->index();

使用工厂模式会多次创建对象Hacl,浪费资源,如果将对象作为参数传递,一方面会带来额外的使用成本,另外如果很多地方都用到这个对象很容易发生错误,因此在工厂模式中使用注册树模式来解决这个问题。

 

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助