来源:5-4 [php]注册树模式

xnceo

2014-11-20 21:16

注册模式不理解,怎么就获取到了db1了?
写回答 关注

1回答

  • sophietan
    2019-02-13 14:01:38
    class Register
    {
        protected static $objects;
    
        // 将一个对象注册到一个全局树上
        static function set($alias,$object)
        {
            self::$objects[$alias] = $object;
        }
    
    
        static function get($name)
        {
            return self::$objects[$name];
        }
    
    
        function _unset($alias)
        {
            unset(self::$objects[$alias]);
        }
    }

    在注册器类中 $Object 是静态属性对吧,因此其生命周期等同全局变量的生命周期,程序结束后才会被销毁。因此在你需要的地方这样调用

    $db = DataBase::getInstance(); // DataBse对象
    
    Register::set('db1',$db); // 把对象$db注册到全局树上它的别名为db1

    如果你是跟着Rango写的使用的时候记得先调用一下工厂方法createDatabase()去获取db对象,因为老师的注册方法写在工厂方法里的

    namespace IMooc;
    
    
    class Factory
    {
        static function createDatabase()
        {
            $db = DataBase::getInstance();
    
            Register::set('db1',$db);
    
            return $db;
        }
    }

    你在入口文件index.php中,这样来调用:

    // 注册树模式 注意一般注册对象会放在项目初始化的位置
    $db = IMooc\Factory::createDatabase();
    
    $db1 = \IMooc\Register::get('db1');
    
    var_dump($db1);

    打印结果就不会是NULL啦

大话PHP设计模式

帮助PHPer具备使用设计模式解决工程中复杂逻辑的能力

62257 学习 · 238 问题

查看课程

相似问题