В сервисном контейнере Laravel я могу связать как синглтон, так и экземпляр. из Laravel do c,
Binding A Singleton
Метод singleton связывает класс или интерфейс в контейнер, который должен разрешаться только один раз. После разрешения одноэлементной привязки тот же экземпляр объекта будет возвращен при последующих вызовах в контейнер:
$this->app->singleton('HelpSpot\API', function ($app) {
return new HelpSpot\API($app->make('HttpClient'));
});
Экземпляры привязки
Вы также можете связать существующий экземпляр объекта в контейнер с помощью метода экземпляра. Данный экземпляр всегда будет возвращаться при последующих вызовах в контейнер:
$api = new HelpSpot\API(new HttpClient);
$this->app->instance('HelpSpot\API', $api);
Q1) Так в чем же разница между этими двумя понятиями? Могу ли я догадаться, что для одноэлементной привязки Laravel при первом запросе строит сам объект через внутренний механизм сервисного контейнера, а затем передает его при последующих вызовах, тогда как в случае привязки экземпляра сервисному контейнеру явно предоставляется уже созданный объект, который он предоставляет на каждый запрос?
или есть какое-то другое объяснение?
Q2) Зачем нам нужны оба варианта связывания?