概念:
在TP6中,Facade
是一种静态代理,可以提供简洁的语法来访问容器中的对象,而无需显式地从容器中解析出对象。它可以将实例化对象封装在静态方法中,然后通过调用静态方法来实现该对象的访问。
在使用TP6时,我们可以通过继承think\Facade
类,并定义一个静态方法getFacadeClass()
,来绑定该类到容器中。然后,在调用该类的方法时,可以直接使用静态方法调用,而无需创建该类的实例或者在容器中解析该类。
使用Facade
静态代理可以简化代码并提高代码的可读性,同时也可以避免在不同部分重复创建同一个实例的问题,提高系统性能和资源利用率。
<?php
namespace app\index\controller;
//use \app\facade\Test;
class Demo2
{
public function index($name = 'ThinkPHP')
{
//对象方式访问hello方法
// $test = new \app\common\Test;
// return $test->hello($name);
/**
* 如果想静态调用一个动态方法,需要给当前的类绑定一个静态代理的类
*如果没有在静态代理类中显示指定要绑定的类名,就需要动态显示绑定一下
* \think\Facade::bind()
*/
\think\Facade::bind('app\facade\Test','\app\common\Test');
// 实际上访问路径为 \app\facade\Test::hello('Peter Zhu');
return Test::hello('wyt');
}
}
名字建议和代理类相同
<?php
namespace app\facade;
//app\facade\Test 代理了 app\common\Test
class Test extends \think\Facade
{
//代理app\common\Test 这个类
// protected static function getFacadeClass()
// {
// return 'app\common\Test';
// }
}
代理类
<?php
namespace app\common;
class Test
{
public function hello($name)
{
return 'Hello'.$name;
}
}