注册树模式是将一个类实例化之后,赋值给一个数组属性,取值的时候,如果这个类对应的属性存在,则不再进行实例化,直接取刚才赋的值即可
<?php
namespace Core\Lib;
/**
* 注册树模式实现类的实例化
* Class Register
* @package Core\Lib
*/
class RegisterTree
{
static $classes = [];
/**
* 设置一个类
* @param $class
* @return mixed
*/
public static function set($class)
{
return self::$classes[$class] = new $class;
}
/**
* 获取 $class 类对应的实例化
* @param $class
* @return mixed
*/
public static function get($class)
{
if (array_key_exists($class, self::$classes)) {
return self::$classes[$class];
}
return self::$classes[$class] = self::set($class);
}
}
应用
$config = \Core\Lib\RegisterTree::get(\Core\Lib\Config::class);
return $config->get($file, $key);