Laravel 的 instance 绑定源码中,为什么要判断是否注册?
大家首先看看服务容器里面instance的绑定代码:
public function instance($abstract, $instance)
{
$this->removeAbstractAlias($abstract);
unset($this->aliases[$abstract]);
$this->instances[$abstract] = $instance;
if ($this->bound($abstract)) {
$this->rebound($abstract);
}
}
public function bound($abstract)
{
return isset($this->bindings[$abstract]) ||
isset($this->instances[$abstract]) ||
$this->isAlias($abstract);
}
很明显,instance函数中刚刚给instances赋值,然后就去利用bound函数去判断abstract是否被注册,这if条件百分之百为真啊,这个判断条件有啥用?
因为
bound
这个方法是公共的,还有其他地方在调用,而且你自己也可以使用如下方式调用@CraryPrimitiveMan 我了解啊,但是在instance函数里面这个位置是不是有问题啊,前面刚刚给instances数组赋值,后面就用instances数组来判断是否注册过。所以要不然就没有if条件,要不然就放到instances数组赋值的前面判断,是不是呢?
@leoyang 刚刚理解错了,从代码的是实现上来说确实没必要。难道是为了后续扩展?当bound方法做了调整时,instance可以不做调整?纯属瞎猜:smile:
刚刚在github中和管理者交流了一下,的确是一个bug
@CraryPrimitiveMan
:+1: 赞 @leoyang