zoukankan      html  css  js  c++  java
  • php设计模式 数据对象映射模式

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

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

    ha_cl表

    Hacl.php

    <?php
    namespace 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

    <?php
    namespace 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

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

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

  • 相关阅读:
    mysql 去除重复数据
    linux 相关命令
    mysql load data infile auto increment id
    《Head First 设计模式》读书笔记
    《NoSQL精粹》读书笔记
    linux 服务器丢包故障排查
    《高性能MySQL》 读书总结
    NAT穿透(UDP打洞)
    python函数调用关系图(python call graph)
    VMware 三种网络模式
  • 原文地址:https://www.cnblogs.com/tianxintian22/p/5232016.html
Copyright © 2011-2022 走看看