Sco*_*nan 14 php singleton ioc-container laravel laravel-4
Laravel文档表明绑定单例的适当方法是使用该App::singleton()方法,但内部Laravel将使用该bindShared()方法(例如,in TranslationServiceProvider).
我认为记录的方法是首选,但有功能差异吗?如果没有,是否有任何理由采取两种方法(超出历史意外)?
我一直想知道同样的事情.我不知道这背后的动机,但我可以谈一些差异.
以下是Laravel 4.2中两种方法的定义:
public function singleton($abstract, $concrete = null)
{
$this->bind($abstract, $concrete, true);
}
public function bindShared($abstract, Closure $closure)
{
$this->bind($abstract, $this->share($closure), true);
}
Run Code Online (Sandbox Code Playgroud)
相似点:
bind()在引擎盖下.true给第3个参数bind(),表示这是一个共享对象.isShared($abstract)将返回true.make($abstract)将返回仅第一个实例.区别:
singleton()会接受一个Closure或一个string.bindShared()只接受一个Closure,而不是一个string.bindShared()除了将对象作为共享对象绑定到IOC容器之外,还需要执行额外的步骤来将传递包装Closure在share'd中Closure,这样可以防止传递Closure多次执行.乍一看,这似乎是双重保证对象将被视为单身人士.我只能猜到为什么这可能是可取的.bindShared()在框架内被调用了87次.singleton()被称为0次.除了bindShared()只接受闭包之外,它们在功能上是相同的.
因此bindShared()在Laravel 5.1(PR 9009 - commit 829060f)中已弃用,并在Laravel 5.2(PR 9037)中删除.
案例终于解决了:)
| 归档时间: |
|
| 查看次数: |
3610 次 |
| 最近记录: |