博客列表 >2019年12月4号:MVC设计模式 依赖注入 容器与Facade门面

2019年12月4号:MVC设计模式 依赖注入 容器与Facade门面

Rambo-Yang
Rambo-Yang原创
2019年12月07日 16:28:17621浏览
  1. //门面
  2. namespace _1204;
  3. //加载模型
  4. use mvc\Model;
  5. use mvc\View;
  6. require 'Model.php';
  7. //加载视图
  8. require 'View.php';
  9. //创建容器
  10. class Container5
  11. {
  12. //创建容器数组
  13. protected $instance = [];
  14. //放进去:将类实例化过程绑定到容器
  15. //$alias:类实例别名
  16. //$process:类的实例化过程 相当于 new Model()
  17. //Closure闭包类型,闭包函数
  18. public function bind($alias,\Closure $process){
  19. $this->instance[$alias] = $process;
  20. }
  21. //取出来:执行容器中的实例方法
  22. //$alias 为类名, $params = [] 就是实例化传的参数,相当于 new Model(a,b,c) 中的abc
  23. public function make($alias,$params=[]){
  24. return call_user_func_array($this->instance[$alias],[]);
  25. }
  26. }
  27. //实例化容器
  28. $container = new Container5();
  29. //绑定数据
  30. $container->bind('model',function (){return new Model();});
  31. $container->bind('view',function (){return new View();});
  32. class Facade
  33. {
  34. //接收实例化容器
  35. protected static $container=null;
  36. //存储数据
  37. protected static $data;
  38. // 用服务容器给它初始化
  39. public static function initialize(Container5 $container){
  40. static::$container = $container;
  41. }
  42. // 用静态代理方式将模型中的getData()静态化
  43. public static function getData(){
  44. static::$data = static::$container->make('model')->getData();
  45. }
  46. // 用静态代理方式将视图中的fetch()静态化
  47. public static function fetch(){
  48. return static::$container->make('view')->fetch(static::$data);
  49. }
  50. }
  51. //创建控制器
  52. class Controller5{
  53. //初始化
  54. public function __construct(Container5 $container)
  55. {
  56. Facade::initialize($container);
  57. }
  58. //创建方法
  59. public function index(){
  60. // 获取数据
  61. Facade::getData();
  62. //渲染模板
  63. return Facade::fetch();
  64. }
  65. }
  66. //客户端调用/访问类成员
  67. $controller = new Controller5($container);
  68. echo $controller->index();



总结

视频看了几遍,看录播看老师的代码好像明白,但是自己写,很多细节地方又会懵,不知道这块为什么要这么写,又是调用了谁的方法,还得多看几遍,多理解。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议