Blogger Information
Blog 36
fans 2
comment 0
visits 23614
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
2019年12月4号:MVC设计模式 依赖注入 容器与Facade门面
Rambo-Yang
Original
619 people have browsed it
  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();



总结

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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:手画个图, 来辅助理解, 一个脚本不难, 难的是多个脚本之间的配合完成一个项目, 现在一个项目不可能只会用到一个php文件 , 都会有上百个php脚本的, 如果想做这行, 就得习惯全局思维
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post