我有需要API密钥(APIClent.php)的类。
我想初始化APIClient.php并共享实例(单例)
我有两个需要访问初始化实例的控制器(上述)。
现在,每次我调用控制器时,它都会获得一个类的实例(APIClient),而不是获得一个存在的类(如果有的话)。
我该如何解决?
这就是我的代码的样子。
AppServiceProvider.php
public function register()
{
$this->app->singleton(APIClient::class, function()
{
return new APIClient(env('API_KEY'));
});
}
ListController.php
public function __construct(APIClient $client)
{
//does the same thing as below
// $this->apiClient = App(APIClient::class);
$this->apiClient = $client;
}
web.php
就是这条线
$router->get('lists', ['uses' => 'ListController@index']);
任何提示或资源表示赞赏。
谢谢
最佳答案
Singleton
并不意味着该对象将保留在所有客户端请求可用的内存中,直到时间结束。这仅意味着服务器在每次请求时只会创建一次,如果在同一请求中再次需要该对象,它将使用创建的对象。
Singleton对于不同的用户可能有所不同,并且可能在下一个请求时发生变化。
您的示例未展示单例的好处,因为您正在控制器的__construct
中使用它,并且在每个请求上也仅调用一次此函数。