Prathamesh Patil
Posted on January 30, 2020
Before Understanding Service container we will know what is a container as a name explain it all as Container is places where we store something and we get it from there when we need it.Below is an example of the code.
class container{
public $bindings =[];
public function bind($name, Callable $resource){
$this->bindings[$name]=resource;
}
public function make($name){
$this->bindings[$name]();
}
}
$container = new container();
$container->bind('Game',function(){
return 'Football';
});
print_r($container->make('Game'));
//Out Put
'Football'
As you can see I have created a container class where I have two methods
1)Bind
2)Make
Bind methods register our function in a container and after that, we make use of that function with make function.
This is a basic concept which laravel uses in Service Container
As we have read the laravel documentation, Service Container helps is managing the Dependency. lets see with an example
app()->bind('Game',function(){
return new Game();
});
dd(app()->make('Game'));
//Output
Game{} // class
In Above code with app()->bind() are binding our service to use it .. then we call to make() to use it then we could see an output as a class .. but what if class Game has a dependency on class Football as shown in below code. it will throw an error
Class Game{
public function __construct(Football $football){
$this->football =$football;
}
}
app()->bind('Game',function(){
return new Game();
});
dd(app()->make('Game'));
//Output
will throw error class football not found so we create a football class as in the below code.
class Football{
}
Class Game{
public function __construct(Football $football){
$this->football =$football;
}
}
app()->bind('Game',function(){
return new Game(new Football);
});
But What if Football Class has one more dependency of the stadium and so on there laravel handles all through service container.
class Football{
}
class Game{
public function __construct(Football $football){
$this->football =$football;
}
}
/*app()->bind('Game',function(){
return new Game(new Football);
});*/
dd(resolve('Game'));
//Output
Game{
football {}
}
So finally we can say that yes service container is a powerful tool for managing class dependencies and performing dependency injection ... :)
Posted on January 30, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
September 21, 2024
September 16, 2024