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));
疑问
- 上述代码最后
$computer = $container->make('Computer',['Board'])
中make
方法第二个参数不是为什么只传了一个Board
数组,最后打印出CommonBoard
对象,?
你
bind
绑定的时候指定board
为CommonBoard
了$this->instances['Board'] = new CommonBoard
楼上说了
@lyxxxh $this->instances['Board'] = new CommonBoard这个什么时候执行了,不一直执行的$this->binds[$abstract] = $concrete;这边吗