🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 定义: 门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个`facade`类 ## 好处: 不用实例化类,可以通过类的代理类(门面类)调用静态方法 ## 代码实现: 使用静态代理\app\facade\Test,代理\app\common\Test 原来的类: ~~~ <?php /** * Created by PhpStorm. * User: d * Date: 2019/3/25 * Time: 10:24 */ namespace app\common; class Test { public function hello($name) { return 'Hello'.$name; } } ~~~ 代理类: ~~~ <?php /** * Created by PhpStorm. * User: d * Date: 2019/3/25 * Time: 10:53 */ namespace app\facade; class Test extends \think\Facade { protected static function getFacadeClass() { return '\app\common\Test'; } } ~~~ 调用: ~~~ <?php /** * Created by PhpStorm. * User: d * Date: 2019/3/25 * Time: 10:26 */ namespace app\index\controller; use app\facade\Test;//这边直接导入代理类的命名空间就好了 class Demo2 { public function index($name='ThinkPHP') { // $test = new \app\common\Test(); // return $test->hello($name); /** * 如果想静态调用一个动态方法,需要给当前的类绑定一个静态代理的类 * 如果没有静态代理类中显示指定要绑定的类名,就需要动态显示绑定一下 * \think\Facade::bind() */ return Test::hello('Peter Zhu'); } } ~~~