聊聊框架开发的依赖注入,容器与外观模式(中部)
内容导读
收集整理的这篇技术教程文章主要介绍了聊聊框架开发的依赖注入,容器与外观模式(中部),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3976字,纯文字阅读大概需要6分钟。
内容图文
这篇文章主要介绍了关于聊聊框架开发的依赖注入,容器与外观模式(中部),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下咱们已经通过依赖注入的方法解决了对象之间的藕合问题,但仍未从根本上解决问题;
下面我们通过容器技术的讲解,让大家明白这种更加合理优秀的解决方案。
容器其实是一个盒子,里面可以装任何服务资源:类,类的实例,闭包,函数等,不仅可以将被调用者放在里面,
甚至主调用对象也可以放在里面。所以容器并不神秘,他和我们日常看到的容器功能是一样的,就是用来装东西的。
目前,容器技术已经得到广泛的应用,众多的优秀的php开发,都是基于容器技术来实现服务自动加载的。
例如: Laravel, ThinkPHP5.1等等。
容器,也称服务容器,简称(IOC)
基本思想:就是拿来就用,最大限度的简化外部对象的调用,类似于:[即插即用]的思想
基本实现分三步:
1.创建容器,将类与类的实例化过程绑定到容器中(不局限于类,也可是接口或其它)
2.服务注册,将可能用到的工具类全部绑定到容器中
3.容器依赖:或者叫依赖容器,调用工作类时直接传入容器对象即可,工具类的实例化由容器完成
下面是实现的源码:
<?php //数据库操作类class Db{//数据库连接public function connect(){return '数据库连接成功<br>';}}//数据验证类class Validate{//数据验证public function check(){return '数据验证成功<br>';}}//视图图class View{//内容输出public function display(){return '用户登录成功';}}/******************************************************************************///一.创建容器类class Container{//创建属性,用空数组初始化,该属性用来保存类与类的实例化方法protected $instance = [];//初始化实例数组,将需要实例化的类,与实例化的方法进行绑定public function bind($abstract, Closure $process){//键名为类名,值为实例化的方法$this->instance[$abstract] = $process;}//创建类实例public function make($abstract, $params=[]){return call_user_func_array($this->instance[$abstract],[]);}}/******************************************************************************///二、服务绑定: 将类实例注册到容器中$container = new Container(); //将Db类绑定到容器中$container->bind('db', function(){return new Db();});//将Validate类实例绑定到容器中$container->bind('validate', function(){return new Validate();});//将View类实例绑定到容器中$container->bind('view', function(){return new View();});//测试:查看一下当前容器中的类实例// var_dump($container->instance); die;/******************************************************************************///三、容器依赖:将容器对象,以参数的方式注入到当前工作类中//用户类:工作类class User{//创建三个成员属性,用来保存本类所依赖的对象// protected $db = null;// protected $validate = null;// protected $view = '';//这三个与外部对象对应的三个属性可以全部删除了,因为它们都已经事先注册到了容器中//用户登录操作// public function login(Db $db, Validate $validate, View $view)//此时,只需从外部注入一个容器对象即可,Db,Validate和View实例方法全部封装到了容器中public function login(Container $container){//实例化Db类并调用connect()连接数据库// $db = new Db();// echo $db->connect();echo $container->make('db')->connect();//实例化Validate类并调用check()进行数据验证// $validate = new Validate();// echo $validate->check();echo $container->make('validate')->check();//实例化视图类并调用display()显示运行结果// $view = new View();echo $container->make('view')->display();}}//在客户端完成工具类的实例化(即工具类实例化前移)// $db = new Db();// $validate = new Validate();// $view = new View();//现在注入过程就非常简单了,只需要从外部注入一个容器对象即可//创建User类$user = new User();//调用User对象的login方法进行登录操作// echo $user->login();// 将该类依赖的外部对象以参数方式注入到当前方法中,当然,推荐以构造器方式注入最方便echo '<h3>用依赖容器进行解藕:</h3>';// echo $user->login($db, $validate, $view);//现在工作类中的login方法不需要再像对象依赖注入那样写三个对象了,只需要一个容器对象就可以了echo $user->login($container);
其实,容器模式,还可以用外观设计模式,进一步进行简化。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
聊聊框架开发的依赖注入,容器与外观模式(上部)
以上就是聊聊框架开发的依赖注入,容器与外观模式(中部)的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的聊聊框架开发的依赖注入,容器与外观模式(中部)全部内容,希望文章能够帮你解决聊聊框架开发的依赖注入,容器与外观模式(中部)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 lecms, classcms, fastadmin, pbootcms, phpcms, eyoucms, yzmcms, PHP, xunruicms, jizhicms, dedecms, wordpress, hkcms, yzncms, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。