注册树模式
2023-06-13 09:12:23 时间
本次代码符合PHP规范PRS_0
根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录)
统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
index.php 公共部分
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
Loader.php
<?php
namespace Frame;
class Loader
{
static function autoload($class)
{
require BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}
}
注册树模式
- 上面两种设计模式有一个缺点,就是必须要调用这个工厂类或者单例类。
- 注册树模式就是把用到的类直接放到注册树上,用的时候直接拿,可以理解为统一的管理对象。
- 这样我们工厂方法和单例方法只需要构造一次(一般在环境初始化的时候注册就可以调用了)
创建Register.php 类
<?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
<?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中调用
<?php
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
\Frame\Factory::createDatabase();
相关文章
- Sublime Text 3 注册/激活方法
- 2022最新注册谷歌账号的方法| 注册谷歌Gmail卡在最后一步“此电话号码无法用于进行验证”已解决!
- 总结了ChatGPT-4的国内使用方法以及注册教程
- 2023年超详细ChatGPT注册教程(完整版),解决国外邮箱问题,国外手机验证问题!
- PHP设计模式_注册树模式详解编程语言
- 使用 Docker 企业版搭建自己的私有注册服务器
- 异步编程模式已被人注册为专利!
- 阿里云启动“88帮帮节”:免费领商业计划书模板 1元云上公司注册
- MySQL 注册成功:一步步实现服务器化(mysql 注册成服务)
- MSSQL注册:从指令中创建新系统(mssql注册命令)
- MySQL下载需注册如何快速下载及安装(mysql下载必须注册吗)
- MySQL下载后注册教程详解步骤注意事项及常见问题(mysql下载后怎么注册)
- MySQL注册服务器失败解决方法分享(mysql不能注册服务器)
- JavaScript注册事件代码