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;
// 子類返回 config 將被 App 類例項化
$facadeClass = static::getFacadeClass();
if ($facadeClass) {
$class = $facadeClass;
}
return Container::getInstance()->make($class, $args, $newInstance);
}
protected static function getFacadeClass()
{}
}
建立 core/src/think/facade/Config.php
檔案
<?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
本作品採用《CC 協議》,轉載必須註明作者和本文連結