• 技术文章 >php教程 >php手册

    浅析php设计模式之数据对象映射模式

    2016-06-06 19:33:38原创360

    php中的设计模式中有很多的各种模式了,在这里我们来为各位介绍一个不常用的数据映射模式吧,希望文章能够帮助到各位。 数据映射模式使您能更好的组织你的应用程序与数据库进行交互。 数据映射模式将对象的属性与存储它们的表字段间的结合密度降低。数据映射

    php中的设计模式中有很多的各种模式了,在这里我们来为各位介绍一个不常用的数据映射模式吧,希望文章能够帮助到各位。

    数据映射模式使您能更好的组织你的应用程序与数据库进行交互。

    数据映射模式将对象的属性与存储它们的表字段间的结合密度降低。数据映射模式的本质就是一个类,它映射或是翻译类的属性或是方法到数据库的相应字段,反之亦然。

    数据映射的作用(工作)就在于能对双方所呈现出的信息的理解,并能对信息的存取进行控制,如根据存储在数据表中的信息

    重建新的域对象,或是用域对象的信息来更新或删除数据表中的相关数据。

    对于面向对象代码与数据库表和字段间的映射关系的存储有多种实现方式。其中一种可能的方法就通过手工编码将这种映射关系存储在数据映射类中。

    另一种可选的方法是用PHP的数组并将其编码为类本身。这个类也能外源获取数据,如INI或是XML文件。

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

    在代码中实现数据对象映射模式,实现一个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设计模式之数据对象映射模式,希望对大家有所帮助!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:Yii中CArrayDataProvider和CActiveDataProvider区别实例分析 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• Yii2如何批量添加数据,Yii2批量添加数据• php+mysqli预处理技术实现添加、修改及删除多条数据的方法,mysqli多条• php+mysql实现数据库随机重排实例,phpmysql重排实例• PHP类中的魔术方法(Magic Method)简明总结,magicmethod• ThinkPHP3.1的Widget新用法
    1/1

    PHP中文网