博客列表 >PHP 服务容器

PHP 服务容器

我是郭富城
我是郭富城原创
2020年05月17日 18:12:08929浏览

PHP 服务容器

1. 实现一个服务容器类

  • 服务容器(Container)的通俗概念就是一个容器,一个管理对象的容器。把类实例放进去是一个方法,取出来也是一个方法。
  • 创建一个服务容器
  1. class Container1
  2. {
  3. // 对象容器
  4. protected $instances = []; //创建一个容器池(数组)
  5. //实现类实例的实例化,并保存到一个数组中
  6. // 绑定: 向对象容器中添加一个类实例
  7. public function bind($alias, \Closure $process)
  8. {
  9. $this->instances[$alias] = $process;
  10. }
  11. // 取出: 从容器中取出一个类实例 (new)
  12. public function make($alias, $params = [])
  13. {
  14. return call_user_func_array($this->instances[$alias], []);
  15. }
  16. }
  • 把对象绑定到容器
  1. $container = new Container1;
  2. // 绑定
  3. $container->bind('model', function () {
  4. return new Model;
  5. });
  6. $container->bind('view', function () {
  7. return new View;
  8. });
  • 创建好了一个服务容器,接下来就需要把容器注入到控制器的 index 方法中,以用容器管理对象。
  1. class Controller4
  2. {
  3. public function index(Container1 $container)
  4. {
  5. // 1. 获取数据
  6. $data = $container->make('model')->getData();
  7. // 2. 渲染模板/视图
  8. return $container->make('view')->fetch($data);
  9. }
  10. }
  • 随后调用控制器,控制器又调用容器。
  1. // 实例化控制器类
  2. $controller = new Controller4();
  3. echo $controller->index($container);

2. 对象销毁

  • 每创建一个对象,就会占用相应的内存,所以当这个对象使用完成之后,及时的释放对象,可以避免内存占用,导致服务器性能下降。
  • 析构函数销毁对象
  1. function __destruct()
  2. {
  3. echo "再见" . $this->name;
  4. }

3. 总结

这样就使用了服务容器将所有要用的对象进行封装,在服务容器内进行了统一的管理。在完成整个软件项目开发的过程中,有时需要多人合作,有时也可以自己独立完成,不管是哪一种,随着代码量上升,写着写着就“失控”了,渐渐“丑陋接口,肮脏实现”,项目维护成本和难度上升,到了难以维持的程度,只有重构或者重新开发。

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