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 协议》,转载必须注明作者和本文链接
希望能先把单词整明白了再发文章