10. “Dependency Injection
is where components are given
their dependencies through
their constructors, methods, or
directly into fields.”
!
“(...) it is a 25-dollar term for a 5-cent concept”
source: picocontainer.codehaus.org jamesshore.com
12. Constructor Injection
class
Tv
implements
HdmiDevice{}
class
DvdPlayer
{
private
$device;
!
public
function
__construct(HdmiDevice
$device)
{
$this-‐>device
=
$device;
}
}
!
$tv
=
new
Tv('Samsung
40"');
$dvdPlayer
=
new
DvdPlayer($tv);
13. Setter Injection
class
BlurayDisc
implements
Disc{}
class
DvdPlayer
{
private
$disc;
!
public
function
setDisc(Disc
$disc)
{
$this-‐>disc
=
$disc;
}
}
!
$disc
=
new
BlurayDisc('Pulp
Fiction');
$dvdPlayer
=
new
DvdPlayer();
$dvdPlayer-‐>setDisc($disc);
27. “Dependency Injection
Container is simply a PHP
object that manages the
instantiation of other objects”
!
We call them “Services”
source: symfony.com
28. Our DvdPlayer
!
!
$tv
=
new
Tv('Samsung
40"');
$dvdPlayer
=
new
DvdPlayer($tv);
!
$disc
=
new
Disc('Pulp
Fiction');
$dvdPlayer-‐>playDisc($disc);
29. Simple Container class
class
Container
{
public
function
getTv()
{
return
new
Tv('Samsung
40"');
}
!
public
function
getDvdPlayer()
{
return
new
DvdPlayer($this-‐>getTv());
}
}
30. Container use
!
!
$container
=
new
Container();
!
$dvdPlayer
=
$container-‐>getDvdPlayer();
!
$disc
=
new
Disc('Pulp
Fiction');
$dvdPlayer-‐>playDisc($disc);
35. class
DvdPlayer
{
public
$disc;
!
public
function
play()
{
if
(!is_null($this-‐>disc))
{
$this-‐>sendToOutput($this-‐>disc-‐>getResource());
}
}
!
public
function
play()
{
if
($this-‐>disc
instanceof
Disc)
{
$this-‐>sendToOutput($this-‐>disc-‐>getResource());
}
}
}