IoC 容器的问题

看了本网站的一些优秀文章自己实践了一下遇到的疑惑

代码块

<?php
interface Boards {
    public function type();
}

class CommonBoard implements Boards {
    public $test = 233;
    public function type(){
        echo '普通键盘';
    }
}
class MechanicalKeyboard implements Boards {
    public function type(){
        echo '机械键盘';
    }
}

class Computer {
    protected $keyboard;

    public function __construct (Boards $keyboard) {
        $this->keyboard = $keyboard;
    }
}

class Container
{
    protected $binds;

    protected $instances;

    public function bind($abstract, $concrete)
    {
        if ($concrete instanceof Closure) {
            $this->binds[$abstract] = $concrete;
        } else {
            $this->instances[$abstract] = $concrete;
        }
    }

    public function make($abstract, $parameters = [])
    {
        if (isset($this->instances[$abstract])) {
            return $this->instances[$abstract];
        }
        array_unshift($parameters, $this);
        return call_user_func_array($this->binds[$abstract], $parameters);
    }
}

$container = new Container;
$container->bind('Board', function($container){
    return new CommonBoard;
});
$module = new CommonBoard();
$container->bind('Computer',function($container,$module){
    return new Computer($container->make($module));
});

$computer = $container->make('Computer',['Board']);
die(var_dump($computer));

疑问

  1. 上述代码最后$computer = $container->make('Computer',['Board'])make方法第二个参数不是为什么只传了一个Board数组,最后打印出CommonBoard对象,?
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3
ShiKi
$container->bind('Board', function($container){
    return new CommonBoard;
});

bind绑定的时候指定boardCommonBoard

4年前 评论

$this->instances['Board'] = new CommonBoard

楼上说了

4年前 评论
张无忌

@lyxxxh $this->instances['Board'] = new CommonBoard这个什么时候执行了,不一直执行的$this->binds[$abstract] = $concrete;这边吗

4年前 评论
lyxxxh 4年前
lyxxxh 4年前
张无忌 (作者) (楼主) 4年前
张无忌 (作者) (楼主) 4年前
lyxxxh 4年前
张无忌 (作者) (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!