Учитывая этот код, помещенный в routes.php файла по умолчанию в Laravel 5.1:Is Laravel 5.1 App: singleton работает неправильно?
\App::singleton('CatalogsService', function(){
return new CatalogsService;
});
Route::group(['prefix' => 'catalogs'], function() {
Route::get('statesmx', function(){
return var_dump(app('CatalogsService'));
});
Route::get('statesmx2', function() {
return var_dump(app('CatalogsService'));
});
Route::get('statesmx3', function() {
return var_dump(app('CatalogsService'));
});
});
Почему я получаю другой экземпляр CatalogsService при переходе к 3 определенным маршрутам?
локальный/каталоги/statesmx отвалов:
object(App\Services\Common\CatalogsService)[152]
localhost/catalogs/statesmx2
отвалы:
object(App\Services\Common\CatalogsService)[153]
localhost/catalogs/statesmx3
отвалы:
object(App\Services\Common\CatalogsService)[154]
Я ожидал получить тот же Id Ссылка на объект.
Единственный способ получить ту же ссылку, добавляя следующий код перед Route::group....
app('CatalogsService');
, когда я делаю это на 3 маршруты дамп же ссылку на объект:
object(App\Services\Common\CatalogsService)[106]
Я не Почему это происходит? Для меня это выглядит так: Laravel Singleton не работает должным образом, если нет чего-то, что мне не хватает в том, как работает Singleton в Laravel.
Благодарим вас за любую помощь или намек на этот вопрос.
PD: Я новичок в Laravel.
Hi. Я думаю, что вы в замешательстве. Экземпляром класса и объекта является одно и то же в контексте языков, поддерживающих классы (JS - частный случай, но не является предметом этого вопроса). Итак, если экземпляр создан, это означает, что объект был создан. Такой объект имеет адрес памяти, а ссылка на этот объект указывает на его адрес. – mogarick
В одноэлементном шаблоне цель состоит в том, чтобы убедиться, что существует только один экземпляр класса, поэтому, когда что-то требует и экземпляр/объект класса, возвращаемый экземпляром, должен быть одним и тем же, что означает, что адрес памяти объекта/экземпляра должен быть тоже самое. Если адрес отличается, то мы не говорим об одном экземпляре, поэтому в этом случае у нас нет Singleton. Вот почему я задаюсь вопросом, действительно ли Синглтон в Ларавеле - Синглтон. Это может быть Singleton, но с продолжительностью запроса. Это то, о чем я не уверен. – mogarick
По запросу я имею в виду «Http Request», а не доступ к памяти! –