[laravel源码]Container/bind与singleton 解析
说明
本章节说明容器中bind
与singleton
的解析过程。
源码
vendor\laravel\framework\src\Illuminate\Container\Container.php
// 调用bind,第三个参数为true
public function singleton($abstract, $concrete = null)
{
$this->bind($abstract, $concrete, true);
}
public function bind($abstract, $concrete = null, $shared = false)
{
// 1. 容器中如已绑定则删除
$this->dropStaleInstances($abstract);
if (is_null($concrete)) {
$concrete = $abstract;
}
if (! $concrete instanceof Closure) {
$concrete = $this->getClosure($abstract, $concrete);
}
// 2. 写入容器(设置bindings属性)
$this->bindings[$abstract] = compact('concrete', 'shared');
// 3. 如已解析,重新执行对应的回调函数
if ($this->resolved($abstract)) {
$this->rebound($abstract);
}
分析
- 重复绑定会覆盖
- 已解析的会重新执行回调函数
本作品采用《CC 协议》,转载必须注明作者和本文链接