В Laravel есть отличный сервисный контейнер, и он делает все инъекции зависимостей, поэтому вам не нужно передавать классу параметр, laravel сделает это за вас.
без контейнера вы должны передать этот параметр
class A {
public $foo;
public function __construct (Foo $foo){
$this->foo
}
$classA = new A((new Foo))
Когда Laravel сталкивается с этими классами, он resolves
их.
Также вы можете вручную определить эти классы, используя singleton()
или bind()
методы
$this->app->singleton('FooBar', function($app)
{
return new FooBar($app['SomethingElse']);
});
Или вы можете использовать интерфейсы.Вы можете привязать реализованный класс к интерфейсу и laravel при встрече с этим интерфейсом, он разрешится по вашему желанию
$this->app->bind('App\ICacheManager', 'App\RedisManager');
public $redis;
public function __contruct(ICacheManager $redis){
$this->redis = $redis;
}
, для дальнейшей проверки сервисный контейнер laravel