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对象,?
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
ShiKi
$container->bind('Board', function($container){
    return new CommonBoard;
});

bind绑定的时候指定boardCommonBoard

3年前 评论

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

楼上说了

3年前 评论
张无忌

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

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

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