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条件百分之百为真啊,这个判断条件有啥用?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5

因为bound这个方法是公共的,还有其他地方在调用,而且你自己也可以使用如下方式调用

$app->bound('xxxx');
3年前 评论

@CraryPrimitiveMan 我了解啊,但是在instance函数里面这个位置是不是有问题啊,前面刚刚给instances数组赋值,后面就用instances数组来判断是否注册过。所以要不然就没有if条件,要不然就放到instances数组赋值的前面判断,是不是呢?

3年前 评论

@leoyang 刚刚理解错了,从代码的是实现上来说确实没必要。难道是为了后续扩展?当bound方法做了调整时,instance可以不做调整?纯属瞎猜:smile:

3年前 评论

刚刚在github中和管理者交流了一下,的确是一个bug
@CraryPrimitiveMan

3年前 评论

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