博主信息
笑颜常开的博客
博文
61
粉丝
0
评论
0
访问量
28043
积分:0
P豆:211.5

依赖容器实现解耦

2019年05月14日 12:41:07阅读数:427博客 / 笑颜常开的博客/ PHP开发

<?php
//容器:也叫服务容器
//1.创建容器:本质就是一个类与它的实现绑定到一个关联数组
//2.服务注册:初始化这个关联数组,将工具类绑定到容器中;
//3.容器依赖:也叫依赖容器,调用的时候直接传一个容器对象即可,不用一个一个传具体对象
class Db
{
   public function connect()
   {
       return '数据库连接成功<br>';
   }
}

class Validate
{
   public function check()
   {
       return '数据验证成功<br>';
   }
}

class View
{
   public function display()
   {
       return '用户登录成功';
   }
}


class Container
{
//    创建一个空数组来保存工具类以及实现方法
   public $instance = [];
//    protected $instance = [];

//    $instance['类名']='类的实例化过程';
//将需要实例化的类与它的实现方法进行绑定:将对象容器初始化
   public function bind($abstract, Closure $process)
   {
       $this->instance[$abstract] = $process;
//        $this->instance['db'] = function(){
//            return new Db();
//        }
   }

//    创建特定类的实例
   public function make($abstract, $params = [])
   {
      return call_user_func_array($this->instance[$abstract], []);
   }
}

//二、服务注册:其实就是调用容器的bind()将对象注册到容器中
$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);


//三、容器注入:容器依赖,以所有用到的对象,以容器的方式,注入到当前的工作类中
class User
{
   public function login(Container $container)
   {
//        $container->make('db')实例化Db类,创建db类,链式调用
       echo $container->make('db')->connect();
       echo $container->make('validate')->check();
       echo $container->make('view')->display();
   }
}
$user=new User();
echo '<h1>依赖容器实现解耦</h1>';
echo $user->login($container);

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • yii注入就是把有关系的类放到中,析出这些类的例,目的是类的,而“注入”也是一种设计模式的,它的决了我们功能时的对“前后”或者说是“上下文的”的关注。
    docker和k8s的区别是:1、docker是一个开源应用引擎,而k8s是一个开源的集群管理系统;2、docker中可以打包应用以及到一个中,或者虚拟化,而k8s可以集群自动化部署等
    区别:​k8s是一个开源的集群管理系统,可以集群的自动化部署、自动扩缩、维护等功能;Docker是一个开源的应用引擎,开发者可以打包他们的应用及到一个可移植的中,发布到流行的Linux
    spring和springmvc的区别是:1、不同,Spring是框架,SpringMVC是基于Spring添加的Web框架,Spring;2、SpringMVC是MVC模式的WEB框架,Spring
    Docker 是一个开源的应用引擎,让开发者可以以统一的方式打包他们的应用以及包到一个可移植的中,然后发布到任何安装了docker引擎的服务上(包括流行的Linux机、windows
    Docker是一个开源的应用引擎,让开发者可以打包应用以及包到一个可移植的中,然后发布到任何流行的Linux机上,也可以虚拟化,是完全使用沙箱机制,相互之间不会有任何接口。
    下面由Laravel​教程栏目给大家介绍关于Laravel kernel例化F,希望对需要的朋友有所帮助!
    javazip压缩中文文件名乱码的决办法:首先选择ANT中ant.jar下的类,代码为【org.apache.tools.zip.ZipEntry】;接着对ant.jar即可。
    Docker 是一个开源的应用引擎,让开发者可以打包他们的应用以及包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机上,也可以虚拟化。

    2020-08-19

    713

    docker是一个开源的应用引擎,让开发者可以打包他们的应用以及包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机上,也可以虚拟化,且是完全使用沙箱机制,相互之间不会有任何接口
    vue的运行要于node的npm管理工具来,且node可用来打包部署,析vue单文件组件,析每个vue模块,启动测试服务localhost,管理vue-router、vue-resource
    spring注入的三种方式是:1、构造注入;2、setter注入;3、接口注入。构造注入于构造方法的,setter注入是通过setter方法注入。
    存储虚拟化的三种方式是:1、基于主机的虚拟存储,于代理或管理软件;2、基于存储设备的虚拟化,于提供相关功能的存储模块;3、基于网络的虚拟存储,又可分为基于互联设备的虚拟化和基于路由的虚拟化
    Docker虚拟化技术是指可以让开发者打包应用以及包到一个轻量级、可移植的中,然后发布到任何流行的Linux机上,也可以虚拟化,并且能够将应用程序与基础架构分开,从而可以快速交付软件。
    javascript的基本特点:1、释型的脚本语言,可在程序的运行过程中逐行进行释。2、基于对象,它不仅可以创建对象,也能使用有的对象。3、设计简单紧凑,易学习。4、动态性。
    线程的任务调度由内核,抢占方式,各种锁;协程的任务调度由用户态的具体调度进行。
    计算机中采用二进制的主要原因是:1、可进行逻辑运算;2、运算法则简单;3、两个状态的系统成本。在数字电子电路中,逻辑门的直接应用了二进制,因此代的计算机和计算机的设备里都用到二进制。
    数据库的概念模型独立于“具体的机和DBMS”。
    本文主要针对框架内部以及门面的做为基准点来,前言在这之前已经剖析过了类的自动加载、配置文件加载的源码析,本文为第三期的文章,主要针对以及门面类的析源码。
    今天和大家介绍下一种结构型设计模式——注册树模式,别名注册模式或注册模式,它是用来保存程序中经常使用的对象的例。注册树模式通过将对象例注册到一棵全局的对象树上,需要的时候从对象树上采摘。