🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## Facade Facade为容器中的类提供了一个静态调用接口,相比于传统的静态方法, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个facade类。 ~~~ <?php namespace app\common; class Test { public function hello($name) { return 'hello,' . $name; } } ~~~ ~~~ <?php namespace app\facade; use think\Facade; class Test extends Facade { protected static function getFacadeClass() { return 'app\common\Build'; } } ~~~ 只需要定义一个facade类库并且继承`think\Facade`,就可以使用静态方式调用Test类的动态方法,例如: ~~~ use app\facade\Test; Test::hello('thinkphp'); ~~~ 就会输出 `hello,thinkphp`。 如果没有通过`getFacadeClass`方法显式指定代理类库,可以在调用的时候进行动态绑定: ~~~ <?php namespace app\facade; use think\Facade; class Test extends Facade { } ~~~ ~~~ use app\facade\Test; use think\Facade; Facade::bind('app\facade\Test','app\common\Test'); Test::hello('thinkphp'); ~~~ 系统给内置的常用类库定义了Facade类库,包括: |类库|Facade| |---|---| | think\App | think\facade\App| | think\Cache | think\facade\Cache| | think\Config | think\facade\Config| | think\Cookie | think\facade\Cookie| | think\Debug | think\facade\Debug | | think\Env | think\facade\Env | | think\Hook | think\facade\Hook| | think\Lang | think\facade\Lang| | think\Log | think\facade\Log | | think\Request | think\facade\Request | | think\Response | think\facade\Reponse| | think\Route | think\facade\Route | | think\Session | think\facade\Session| | think\Url | think\facade\Url | | think\View | think\facade\View | 所以你无需进行实例化就可以很方便的进行方法调用,例如: ~~~ use think\facade\App; App::version(); App::getThinkPath(); // 或者使用助手函数 app()->version(); app()->getThinkPath(); ~~~ 当app助手函数参数为空的时候,表示获取`think\App`对象实例。 App类是一个特殊的容器助手,可以通过app助手函数方便的操作容器,绑定对象实例 ~~~ app()->test = new Test; app()['test'] = new Test; ~~~ 获取容器中的对象实例下面用法是等效的: ~~~ app()->test; app()['test']; ~~~