2.5 门面模式
知识梳理
1 在依赖注入的时候使用动态类 不要使用门面模式
2 依赖注入和门面代理大部分情况下是一样的,都是从容器里获取对象实例。
3 依赖注入的优势是支持接口注入,而 facade 则无法完成
4 一定要注意 use 引入类库的区别
依赖注入: use think\Route;
门面模式: use think\facade\Route;
自己实践一下
1)创建动态类
<?php
namespace app\admin\controller;
class News
{
public function hello(){
return '我是新闻页的hello';
}
}
2)创建对应的门面类
在admin目录下 新建 facade 目录 <?php namespace app\admin\facade; use think\facade; class News extends facade { //获取当前Facade对应类名(或者已经绑定的容器对象标识) public static function getFacadeClass(){ return '\app\admin\controller\News'; //没有使用容器标识 return 'news'; //使用容器标识 } } 该类就做了一件是 重写父类的 getFacadeClass()静态方法 把自己的动态类名 return 出去
3)调用自己定义的门面类
<?php namespace app\admin\controller; use app\admin\facade\News; class Index { public function hello(){ return News::hello(); } }
http://www.blog.com/admin/index/hello 访问成功
门面的执行流程