laravel 核心 singleton()方法解析

2019-03-07  本文已影响0人  youngxs

singleton()主要就是调用bind()方法,只不过直接将shared 参数设为true.

下面进入bind()方法中

bind()解释

dropStaleInstances()的作用就是删除$this->instances[$abstract], $this->aliases[$abstract];

接着判断参数$concrete是否为空,若为空则将$abstract赋值给$concrete

接着判断$concrete是否为闭包函数,若不是则将$concrete生成一个闭包函数

下面看getClosure()是如何生成闭包函数的

闭包函数的生成

可以看到,该方法中,直接返回一个闭包函数,至于$container,$parameters不用先考虑, 因为在使用该闭包的时候会将参数传递进去,其中make()方法中就有该闭包函数的参数传递。

接下来就是$this->bindings[$abstract] = compact('concrete', 'shared');

这也是最关键的一步,将该闭包函数,和shared 赋值给$this->bindings[$abstract],这一步就是所谓的绑定。

接着就是判断$this->resolved($abstract)

若是为true则执行rebound()

make方法就不先介绍了,到时候专门在做解释

上一篇下一篇

猜你喜欢

热点阅读