1.4 - Laravel 5.6 - Share 机制

laravel的container中有个shared机制。
我们看下他的源代码。

满足shared 只要满足两个条件中的任意一个

1.instances数组中存在解析完成的实例。(说明这个实例数组中的所有数据都是shared)。我们通过名字就知道存储的是实例化的对象。

2.或者,可能还未实例化,已经绑定在数组bindings中并且标记为shared为true的类。
看代码:

public function isShared($abstract)
{
    return isset($this->instances[$abstract]) ||
(isset($this->bindings[$abstract]['shared']) &&
    $this->bindings[$abstract]['shared'] === true);
}

总结

通过shared我们知道两点:
1.shared是一个标记。标记bindings数组中的abstract是否可以被共享。
2.instance这个已经实例化的数组中的对象都是共享的。

shared标记我猜想首先可以用作单例,和其他类共享单个实例。
看singleton实例:

$this->app->singleton('HelpSpot\API', function ($app) {
    return new \HelpSpot\API($app->make('HttpClient'));
});

源码:第三个参数被标记为true

public function singleton($abstract, $concrete = null)
{
    $this->bind($abstract, $concrete, true);
}

单例绑定shared的值为true,然后绑定到bindings[$abstract]

public function bind($abstract, $concrete = null, $shared = false){

    ...
    $this->bindings[$abstract] = compact('concrete', 'shared');
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

希望能先把单词整明白了再发文章

4年前 评论
HarveyNorman (楼主) 4年前
tankeban123 4年前
tankeban123 4年前

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