欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

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

程序员文章站 2022-05-18 08:44:25
...

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

相关标签: php