首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >注册树模式

注册树模式

作者头像
友儿
发布2022-09-11 11:40:36
发布2022-09-11 11:40:36
3980
举报
文章被收录于专栏:友儿友儿
本次代码符合PHP规范PRS_0
根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)

index.php 公共部分

代码语言:javascript
复制
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');

Loader.php

代码语言:javascript
复制
<?php

namespace Frame;

class Loader
{
    static function autoload($class)
    {
        require  BASEDIR.'/'.str_replace('\\','/',$class).'.php';
    }
}
注册树模式
  • 上面两种设计模式有一个缺点,就是必须要调用这个工厂类或者单例类。
  • 注册树模式就是把用到的类直接放到注册树上,用的时候直接拿,可以理解为统一的管理对象。
  • 这样我们工厂方法和单例方法只需要构造一次(一般在环境初始化的时候注册就可以调用了)

创建Register.php 类

代码语言:javascript
复制
<?php

namespace Frame;

class Register
{
    protected static $objects;//存放对象
    // $alias 别名   $object 对象 
    static public function set($alias ,$object)
    {
        self::$objects[$alias] = $object;
    }
    //通过别名获取注册树上的某个对象
    static public function get($name)
    {
        return isset(self::$objects[$name]) ? self::$objects[$name] : null;
    }
    //通过别名删除注册树上的某个对象
    static public function _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
}

结合注册数模式、单例模式、工厂模式。 修改Factory.php

代码语言:javascript
复制
<?php

namespace Frame;

class Factory
{
     static public function  createDatabase()
     {
        //$db = new \Frame\Database();   //单一工厂模式
        //$db = Database::getInstance(); //结合单例模式的工厂模式
        $db = Register::get('db1');      //结合注册数模式、单例模式、工厂模式
        if ($db) {
            return $db;
        } else {
             $db = Database::getInstance();
             Register::set('db1', $db);
             return $db;
        } 
     }
 }

index.php中调用

代码语言:javascript
复制
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');

\Frame\Factory::createDatabase(); 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本次代码符合PHP规范PRS_0
  • 根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
  • 统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
  • 注册树模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档