20.0.门面系统

Facades门面系统

用于

.tip.php文件

优点

原理

abstract class Facade{
    /**
     * 获取注册的组件名称,子类必须继承实现该方法
     *
     * @return string
     */
    abstract protected static function getName();
    /**
     * 从组件容器中获取对应实例
     *
     * @param string $name
     * @return mixed
     */
    public static function getInstance(){
        return com(static::getName());
    }
}   

案例

//Log.php创建一个Log门面类
class Log extends Facade{
    /**
     * 门面类代理的组件名称
     * 
     * @return string
     */
    protected static function getName(){
        return 'logger';
    }
}
//Log.tips.php 仅用于ide语法提示
class Log extends Facade{
    /**
     * 返回组件实例
     * @return \qing\log\Logger
     */
    public static function getInstance(){

    }
    /**
     * @param string $message
     * @param array  $options
     */
    public static function info($message,array $options=[]){
    }
}

//调用门面类静态函数
Log::info('haha');
//上面的代码等效于
Facade::getInstance()->info('haha')
//更进一步
com(static::getName())->info('haha')
//获取组件实例并调用成员方法info
com('logger')->info('haha')