• PHP 设计模式 笔记与总结(10)数据对象映射模式 2


    【例2】数据对象映射模式结合【工厂模式】和【注册模式】的使用。

    入口文件 index.php:

    <?php
    define('BASEDIR',__DIR__); //定义根目录常量
    include BASEDIR.'/Common/Loader.php';
    spl_autoload_register('\Common\Loader::autoload');
    echo '<meta http-equiv="content-type" content="text/html;charset=utf8">';
    
    class Page{
        function index(){
            //使用工厂方法生成对象,而不是直接new
            $user = CommonFactory::getUser(1);
            $user->name = 'Ozil';
            
            $this->test();
            echo 'success';
        }
        
        function test(){
            //对对象属性的操作就完成了对数据库的操作
            $user = CommonFactory::getUser(1);
            $user->mobile = '13912345678';
            $user->regtime = date("Y-m-d H:i:s",time()); 
        }
    }
    
    $page = new Page();
    $page->index();

    index() 和 test() 中的 $user 对象为同一个对象。 

    工厂模式文件 CommonFactory.php

    <?php
    namespace Common;
    
    class Factory{
        static function createDatabase(){
            $db = Database::getInstance();
            //得到数据库对象后,使用注册器模式将该对象映射到全局树上
            Register::set('db1',$db);//db1为映射的别名
            return $db;
        }
        
        static function getUser($id){
            //注册器模式
            $key = 'user_'.$id;
            $user = Register::get($key);
            if(!$user){
                $user = new User($id);
                Register::set($key , $user);
            }
            return $user;
        }
    }

    访问入口文件,就能修改 test 数据库 user 表中 id 为1 的数据。

  • 相关阅读:
    2012年决胜HTML5 十四大Web预测盘点
    王海波:Discuz! X 社区功能架构
    史应生:Linux操作系统的性能优化技术
    虚拟还原原理解析
    金山张宴:PHP在金山游戏运营中的应用
    java方法的参数传递
    java逻辑连接词总结
    java名称命名规范
    java引用包的两种方式
    java信息的封装和隐藏
  • 原文地址:https://www.cnblogs.com/dee0912/p/4486174.html
Copyright © 2020-2023  润新知