多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 门面(`Facade`) 门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个`facade`类。 > 系统已经为大部分核心类库定义了`Facade`,所以你可以通过`Facade`来访问这些系统类,当然也可以为你的应用类库添加静态代理。 下面是一个示例,假如我们定义了一个`app\common\Test`类,里面有一个`hello`动态方法。 ~~~ <?php namespace app\common; class Test { public function hello($name) { return 'hello,' . $name; } } ~~~ 调用hello方法的代码应该类似于: ~~~ $test = new \app\common\Test; echo $test->hello('dmphp'); // 输出 hello,dmphp ~~~ 接下来,我们给这个类定义一个静态代理类`app\facade\Test`(这个类名不一定要和`Test`类一致,但通常为了便于管理,建议保持名称统一)。 ~~~ <?php namespace app\facade; use think\Facade; class Test extends Facade { protected static function getFacadeClass() { return 'app\common\Test'; } } ~~~ 只要这个类库继承`phalcon\Facade`,就可以使用静态方式调用动态类`app\common\Test`的动态方法,例如上面的代码就可以改成: ~~~ // 无需进行实例化 直接以静态方法方式调用hello echo \app\facade\Test::hello('dmphp'); ~~~ 结果也会输出`hello,dmphp`。