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方法就不先介绍了,到时候专门在做解释