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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

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

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

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