在我读过的 Laravel 文档中:
将“共享”类型绑定(bind)到容器中
App::singleton('foo', function()
{
return new FooBar;
});
对比
将现有实例绑定(bind)到容器中
$foo = new Foo;
App::instance('foo', $foo);
由于 Laravel 文档的弱点,我无法理解它们的区别。
谁能解释一下?
最佳答案
在 Github 上签到,我们可以看到 the singleton
method是 bind
方法的别名,但设置为“共享”(基本上是单例):
/**
* Register a shared binding in the container.
*
* @param string $abstract
* @param Closure|string|null $concrete
* @return void
*/
public function singleton($abstract, $concrete = null)
{
return $this->bind($abstract, $concrete, true);
}
另一方面,the instance method ,事实证明,有一个相当简单的用例:
/**
* Register an existing instance as shared in the container.
*
* @param string $abstract
* @param mixed $instance
* @return void
*/
public function instance($abstract, $instance) { ... }
基本上,您传递的是现有对象/值,而不是返回对象/值的闭包。它返回相同的对象/值实例,这实际上也是一个单例。
不同之处在于,当使用“实例”绑定(bind)到容器时,实例已经存在,而当您通过在闭包中,谁负责生成结果对象/值单例。
关于php - Laravel 单例和实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23168109/