博主信息
博文 62
粉丝 7
评论 2
访问量 74136
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP 服务容器
我是郭富城
原创
1137人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学