## 定义:
门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个`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');
}
}
~~~