php - Laravel 单例和实例

标签 php laravel

在我读过的 Laravel 文档中:

将“共享”类型绑定(bind)到容器中

App::singleton('foo', function()
{
    return new FooBar;
});

对比

将现有实例绑定(bind)到容器中

$foo = new Foo;

App::instance('foo', $foo);

由于 Laravel 文档的弱点,我无法理解它们的区别。

谁能解释一下?

最佳答案

在 Github 上签到,我们可以看到 the singleton methodbind 方法的别名,但设置为“共享”(基本上是单例):

/**
 * 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/

相关文章:

php - aws s3Client PutObject 访问被拒绝,但 Cyber​​Duck 可以成功 PutObject

php - 从多个嵌套数组中获取所有组合

php - 如何创建具有用户角色的 JWT token (Spatie JWT 网络 token )

php - Laravel 6 - SQLSTATE [23000] : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

php - 如何避免MySQL中的 "access denied"警告?

当我尝试编写插入语句时 PHP 语法错误

laravel - 动态生成lang文件

laravel -\Request::getSession() 在 Controller 构造中返回 NULL

php - Laravel 4 在数据库中存储索引而不是值

php - 如何在 jQuery 中正确使用开关?