作者:狗子汪_322 | 来源:互联网 | 2023-09-11 20:49
ThinkPHP的Facade类为容器中的类提供了一个静态调用接口,可以不用实例化对象而直接通过类实现对方法的调用。在不使用Facade类读取配置如下$configContaine
ThinkPHP 的 Facade
类为容器中的类提供了一个静态调用接口,可以不用实例化对象而直接通过类实现对方法的调用。在不使用 Facade 类读取配置如下
$config = Container::get('config');
$config->set('num', 5);
return $config->get('num');
使用 Facade
显得更为简洁,如下
Config::set('num', 5);
return Config::get('num');
创建 core/src/think/Config.php
namespace think;
class Config
{
protected $config = [];
public function get($name)
{
return isset($this->config[$name]) ? $this->config[$name] : null;
}
public function set($name, $value = null)
{
$this->config[$name] = $value;
}
}
创建 core/src/think/Facade.php
文件用于静态调用
class Facade
{
public static function __callStatic($method, $params)
{
return call_user_func_array([static::createFacade(), $method], $params);
}
protected static function createFacade(string $class = '', array $args = [], bool $newInstance = false)
{
$class = $class ?: static::class;
$facadeClass = static::getFacadeClass();
if ($facadeClass) {
$class = $facadeClass;
}
return Container::getInstance()->make($class, $args, $newInstance);
}
protected static function getFacadeClass()
{}
}
创建 core/src/think/facade/Config.php
文件
namespace think\facade;
use think\Facade;
class config extends Facade
{
protected static function getFacadeClasss()
{
return 'config';
}
}
在 Index.php
的 index()
方法中修改代码如下
use think\Config;
public function index()
{
Config::set('num', 5);
return Config::get('num');
}
访问 diy.tp
成功打印
5
thinkphp