ThinkPHP 5.1 记录(三) Facade 静态代理

官方说明:门面(Facade)门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带...

官方说明:

门面(Facade)

门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个facade类。

image.png

代码:

// 静态代理

namespace app\common;
class Test{
	public function Test1($name){
		return 'hello'.$name;
	}
}

// 传统访问:
// $test = new Test;
// $test->Test1('zhuzhuxia');

// 使用静态方式调用:
// 创建一个静态继承
// 建议与动态类命相同
namespace app\facade;
class Test extends \think\Facade{
	protected static function getFacadeClass(){
		return 'app\common\Test';
	}
}

// app\facade\Test 代理了 app\common\Test

// 随即即可使用静态方法调用,当然,必须先进行use
// use app\facade\Test;
// Test::Test1('111');
// 或者直接使用命名空间
// \app\facade\Test::Test1('111');
namespace app\index\controller;
use app\facade\Test;
class Demo{
	public function Demo1($name='demo'){
		return Test::Test1($name);
		return \app\facade\Test::Test1($name);
	}
}


然而,如果没有在静态代理类中显示指定要绑定的类名,则需要修改代码

namespace app\facade;
class Test extends \think\Facade{
	// protected static function getFacadeClass(){
	// 	return 'app\common\Test';
	// }
}

// 就需要用动态显示绑定方法绑定一下
namespace app\index\controller;
use app\facade\Test;
class Demo{
	public function Demo1($name='demo'){
		\think\Facade::bind('\app\facade\Test','\app\common\Test');
		return Test::Test1($name);
		return \app\facade\Test::Test1($name);
	}
}


系统内置类

image.png

评论