加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 如何在课堂上访问Laravel Singletons?

发布时间:2020-12-14 19:44:32 所属栏目:大数据 来源:网络整理
导读:我在服务提供商中注册了一个单身人士,如下所示: $this-app-singleton(MyClass::class); 通常只需在参数中声明它就可以访问它: class FooController extends Controller{ public function index(MyClass $myClass) { //... }} 但是我似乎无法在其他自定义类
我在服务提供商中注册了一个单身人士,如下所示:

$this->app->singleton(MyClass::class);

通常只需在参数中声明它就可以访问它:

class FooController extends Controller
{
    public function index(MyClass $myClass)
    {
        //...
    }
}

但是我似乎无法在其他自定义类(即非控制器类)中访问此单例. (https://laravel.com/docs/5.2/container#resolving)

比如像这里:

class Bar {
   private $myClass;
   private $a;
   private $b;

   public function __construct($a,$b) {
      $this->a = $a;
      $this->b = $b;
      $this->myClass = ... // TODO: get singleton
   }
}

我该怎么做呢?

请注意,我将创建多个Bar实例.

解决方法

在构造函数中键入提示类/接口,在大多数情况下,Laravel会自动解析并将其注入到您的类中.

有关示例和替代方案,请参见Service Provider documentation.

跟你的例子一起:

class Bar {
    private $myClass;

    public function __construct(MyClass $myClass) {
       $this->myClass = $myClass;
    }
}

如果Bar :: __构造采用了无法在服务提供者中定义的其他参数,则必须使用服务定位器:

/* $this->app is an instance of IlluminateFoundationApplication */
$bar = new Bar($this->app->make(MyClass::class),/* other parameters */);

或者,将服务位置自动移动到构造函数中:

use  IlluminateSupportFacadesApp;

class Bar {
    private $myClass;

    public function __construct() {
       $this->myClass = App::make(MyClass::class);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读