博主信息
博文 61
粉丝 0
评论 0
访问量 65791
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
依赖容器实现解耦
笑颜常开的博客
原创
1115人浏览过

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

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

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