聊聊框架开发的依赖注入,容器与外观模式(中部)

聊聊框架开发的依赖注入,容器与外观模式(中部)

内容导读

收集整理的这篇技术教程文章主要介绍了聊聊框架开发的依赖注入,容器与外观模式(中部),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含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网其它相关文章!

内容总结

以上是为您收集整理的聊聊框架开发的依赖注入,容器与外观模式(中部)全部内容,希望文章能够帮你解决聊聊框架开发的依赖注入,容器与外观模式(中部)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com