首页 > Web开发 > 详细

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

时间:2020-02-17 21:40:44      阅读:71      评论:0      收藏:0      [点我收藏+]

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

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

就是PHP框架中的模型

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 \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

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

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

 

原文地址:https://www.cnblogs.com/tianxintian22/p/5232016.html

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

原文:https://www.cnblogs.com/zhangzhijian/p/12323560.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!