美文网首页
PHP设计模式(四)-数据库对象映射模式

PHP设计模式(四)-数据库对象映射模式

作者: EwanRenton | 来源:发表于2018-07-26 16:35 被阅读0次

    layout: post
    title: "PHP设计模式(四)-数据库对象映射模式"
    date: 2016-06-06 11:24:26 +0800
    comments: true
    categories: [php]


    1、模式定义

    在了解数据映射模式之前,先了解下数据映射,它是在持久化数据存储层(通常是关系型数据库)和驻于内存的数据表现层之间进行双向数据传输的数据访问层。

    数据映射模式的目的是让持久化数据存储层、驻于内存的数据表现层、以及数据映射本身三者相互独立、互不依赖。这个数据访问层由一个或多个映射器(或者数据访问对象)组成,用于实现数据传输。通用的数据访问层可以处理不同的实体类型,而专用的则处理一个或几个。

    数据映射模式的核心在于它的数据模型遵循单一职责原则(Single Responsibility Principle), 这也是和 Active Record 模式的不同之处。最典型的数据映射模式例子就是数据库 ORM 模型 (Object Relational Mapper)。

    ha_cl表
    [图片上传失败...(image-9e012e-1532594097674)]

        <?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");
        }
        }
    
        //工厂模式
        <?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;
        }
        }
    
        <?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];
        }
        }
    
        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(); 
    

    相关文章

      网友评论

          本文标题:PHP设计模式(四)-数据库对象映射模式

          本文链接:https://www.haomeiwen.com/subject/zeibmftx.html