我已经在这样的服务提供商中注册了一个单例:

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

通常可以通过简单地在参数中声明它来访问它,如下所示:
class FooController extends Controller
{
    public function index(MyClass $myClass)
    {
        //...
    }
}

但是我似乎无法在其他自定义类(即非 Controller 类)中访问此单例。 (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 6和更高版本中,还有更多的帮助程序来解决此问题:

resolve(MyClass::class);
app(MyClass::class);
以及其他答案提供的所有方法
class Bar {
   private $myClass;
   private $a;
   private $b;

   public function __construct($a, $b) {
      $this->a = $a;
      $this->b = $b;
      $this->myClass = app(MyClass::class);
   }
}

关于php - 如何在类(class)中访问Laravel Singletons?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35684830/

10-11 22:56
查看更多