## 定義:
門面為容器中的類提供了一個靜態調用接口,相比于傳統的靜態方法調用, 帶來了更好的可測試性和擴展性,你可以為任何的非靜態類庫定義一個`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');
}
}
~~~