В чем разница между методом `app` Laravel и ключевым словом` new`? - PullRequest
0 голосов
/ 26 октября 2018

Я обнаружил, что некоторые разработчики используют app(SomeService::class);, а другие используют new SomeService(); в Laravel? Есть ли разница между ними?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Да, основным отличием является ServiceContainer.

Если вы создаете экземпляр с помощью app(YourService::class), ServiceContainer будет использовать reflection для добавления в класс constructor требуемых зависимостей.

Так что вам не нужно явно указывать use все необходимые зависимости.

Это хорошо объяснено здесь .

0 голосов
/ 26 октября 2018

Пожалуйста, отметьте https://laravel.com/docs/5.7/providers.

Вкратце, если вы хотите настроить класс, который вы будете использовать во время выполнения, вы можете изменить его в провайдере (сделать его одиночным или передать несколько аргументов) и войти во время выполнения через $app (если у вас нет возможности использовать DI).но когда вы создаете объект vie new, он только создает экземпляр.

Представьте, что у нас есть класс A, который получает 2 параметра конфигурации в процессе строительства.Так что нужно везде звонить new A($param1,$param2).но используя провайдеров, вы можете использовать DI для получения экземпляра класса A с уже переданными параметрами или $app, если у вас нет возможности использовать DI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...