KEMBAR78
Zend Framework 2 : Dependency Injection | PDF
ZEND	
  FRAMEWORK	
  2	
  
DEPENDENCY	
  INJECTION    	
  


     	
   	
  h#p://slideshare.net/samsonasik	
  
Abdul	
  Malik	
  Ikhsan	
  
a.k.a	
  samsonasik	
  

~	
  Zend	
  Framework	
  specialist	
  
~	
  Codeigniter	
  Mentor	
  
On	
  twi#er	
  @samsonasik	
  
Blog	
  h#p://samsonasik.wordpress.com	
  
Apa	
  sih	
  “DI”	
  itu	
  ?	
  
«	
  Dependency	
  InjecGon	
  is	
  where	
  
      components	
  are	
  given	
  their	
  
      dependencies	
  through	
  their	
  
constructors,	
  methods,	
  or	
  directly	
  
            into	
  fields.	
  »	
  
      	
  h#p://www.picocontainer.org/injecGon.html	
  	
  
 h#p://www.slideshare.net/fabpot/dependency-­‐injecGon	
  
-­‐	
  DEPENDENCY	
  INJECTION	
  TERJADI	
  
KETIKA	
  KOMPONEN	
  SOFTWARE	
  
(	
  DALAM	
  HAL	
  INI,	
  KELAS	
  )	
  
DEPENDENSINYA	
  DIBERIKAN	
  MELALUI	
  
KONSTRUKTOR	
  
MEREKA,	
  METHOD,	
  ATAU	
  LANGSUNG	
  
KE	
  FIELDS	
  
=>	
  PASSING	
  ATAU	
  SETTING	
  DEPENDENCY	
  
KE	
  DALAM	
  KOMPONEN	
  SOFTWARE	
  

=>	
  JIKA	
  SEBUAH	
  KELAS	
  TIDAK	
  DAPAT	
  
MELAKUKAN	
  PEKERJAANNYA	
  TANPA	
  
DEPENDENCY,	
  MAKA	
  TERJADILAH	
  
DEPENDENCY	
  INJECTION	
  
-­‐	
  CONSTRUCTOR	
  INJECTION	
  
-­‐	
  SETTER	
  INJECTION	
  
-­‐	
  INTERFACE	
  INJECTION	
  
CONSTRUCTOR	
  INJECTION	
  
class	
  Kalimat	
  
{	
  

	
  	
  	
  	
  protected	
  $filterstring;	
  

	
  	
  	
  	
  public	
  funcGon	
  __construct(FilterString	
  $filterstring	
  )	
  	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $this-­‐>filterstring	
  =	
  $filterstring	
  ;	
  	
  
	
  	
  	
  	
  }	
  	
  
}	
  	
  
SETTER	
  INJECTION	
  

class	
  Kalimat	
  
{	
  

	
  	
  	
  	
  protected	
  $filterstring;	
  

	
  	
  	
  	
  public	
  funcGon	
  setFilterString(FilterString	
  $filterstring	
  )	
  	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $this-­‐>filterstring	
  =	
  $filterstring	
  ;	
  	
  
	
  	
  	
  	
  }	
  	
  
}	
  	
  
INTERFACE	
  INJECTION	
  


interface	
  Kalimat	
  
{	
  
	
  	
  	
  	
  public	
  funcGon	
  setFilter(FilterString	
  	
  $filterstring);	
  
}	
  	
  
2	
  KELAS	
  (	
  SAMPLE	
  )….	
  
<?php	
  

class	
  FilterString	
  
{	
  
	
  	
  	
  	
  protected	
  $str;	
  
	
  	
  	
  	
  public	
  funcGon	
  __construct($str)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $this-­‐>str	
  =	
  ucfirst(	
  str_replace("	
  ","_",	
  $str)	
  );	
  	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  public	
  funcGon	
  get()	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  $this-­‐>str;	
  	
  
	
  	
  	
  	
  }	
  
}	
  
<?php	
  

class	
  Kalimat	
  {	
  
	
  	
  	
  	
  protected	
  $filterstring;	
  

	
  	
  	
  	
  public	
  funcGon	
  __construct(FilterString	
  $filterstring)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $this-­‐>filterstring	
  =	
  $filterstring;	
  
	
  	
  	
  	
  }	
  

	
  	
  	
  	
  public	
  funcGon	
  out()	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  echo	
  'ouGng	
  ....	
  -­‐>	
  ';	
  
	
  	
  	
  	
  	
  	
  	
  	
  echo	
  $this-­‐>filterstring-­‐>get();	
  
	
  	
  	
  	
  }	
  
}	
  
TANPA	
  ZENDDI	
  



<?php	
  

$filter	
  =	
  new	
  FilterString('saya	
  sedang	
  membaca');	
  
$kalimat	
  =	
  new	
  Kalimat($filter);	
  
$kalimat-­‐>out();	
  
KITA	
  BUTUH	
  CONTAINER	
  !!!	
  
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐	
  
/*	
  
MENYIMPAN	
  OBJECT	
  DEFINITION	
  DAN	
  
ENVIRONMENT,	
  MENG-­‐HANDLE	
  
PENCIPTAAN	
  OBJECT	
  
*/	
  
ZEND	
  FRAMEWORK	
  MEMPUNYAI	
  
(	
  DEPENDENCY	
  INJECTION	
  
COMPONENT	
  )	
  
<?php	
  

$di	
  =	
  new	
  ZendDiDi;	
  
$di-­‐>instanceManager()	
  
	
  	
  	
  	
  	
  	
  	
  -­‐>setParameters('FilterString',	
  array(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'str'	
  =>	
  'saya	
  sedang	
  membaca’	
  
));	
  

$kalimat	
  	
  =	
  $di-­‐>get('Kalimat');	
  //contains	
  FilterString	
  !	
  
$kalimat-­‐>out();	
  
MENGGUNAKAN	
  SETTER	
  ???	
  
……………	
  
public	
  funcGon	
  setFilterString(FilterString	
  $filterstring)	
  
{	
  
	
  	
  	
  	
  $this-­‐>filterstring	
  =	
  $filterstring;	
  
}	
  
$di	
  =	
  new	
  ZendDiDi();	
  
$di-­‐>configure(new	
  ZendDiConfiguraGon(array(	
  
	
  	
  	
  	
  'definiGon'	
  =>	
  array(	
  
	
  	
  	
  	
  	
  	
  	
  	
  'class'	
  =>	
  array(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'Kalimat'	
  =>	
  array(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'setFilterString'	
  =>	
  array('required'	
  =>	
  true)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  
	
  	
  	
  	
  	
  	
  	
  	
  )	
  
	
  	
  	
  	
  )	
  
)));	
  

$kalimat	
  =	
  $di-­‐>get('Kalimat',	
  	
  
   	
  array(	
  'str'=>'saya	
  sedang	
  membaca'	
  )	
  );	
  
$kalimat-­‐>out();	
  
TERIMA	
  KASIH	
  ;)	
  
Referensi	
  :	
  
•  h#p://www.picocontainer.org/injecGon.html	
  	
  
•  h#p://www.slideshare.net/fabpot/dependency-­‐
   injecGon	
  
•  h#p://mwop.net/slides/2011-­‐10-­‐18-­‐Zf2-­‐Overview/
   Zf2Overview.html#slide15	
  
•  h#p://akrabat.com/zend-­‐framework-­‐2/an-­‐
   introducGon-­‐to-­‐zenddi/	
  


Foto	
  :	
  	
  
•  h#p://www.as3dp.com/wp-­‐content/uploads/
   2010/10/dependencyInjecGon.png	
  

Zend Framework 2 : Dependency Injection

  • 1.
    ZEND  FRAMEWORK  2   DEPENDENCY  INJECTION      h#p://slideshare.net/samsonasik  
  • 2.
    Abdul  Malik  Ikhsan   a.k.a  samsonasik   ~  Zend  Framework  specialist   ~  Codeigniter  Mentor   On  twi#er  @samsonasik   Blog  h#p://samsonasik.wordpress.com  
  • 3.
  • 4.
    «  Dependency  InjecGon  is  where   components  are  given  their   dependencies  through  their   constructors,  methods,  or  directly   into  fields.  »    h#p://www.picocontainer.org/injecGon.html     h#p://www.slideshare.net/fabpot/dependency-­‐injecGon  
  • 5.
    -­‐  DEPENDENCY  INJECTION  TERJADI   KETIKA  KOMPONEN  SOFTWARE   (  DALAM  HAL  INI,  KELAS  )   DEPENDENSINYA  DIBERIKAN  MELALUI   KONSTRUKTOR   MEREKA,  METHOD,  ATAU  LANGSUNG   KE  FIELDS  
  • 6.
    =>  PASSING  ATAU  SETTING  DEPENDENCY   KE  DALAM  KOMPONEN  SOFTWARE   =>  JIKA  SEBUAH  KELAS  TIDAK  DAPAT   MELAKUKAN  PEKERJAANNYA  TANPA   DEPENDENCY,  MAKA  TERJADILAH   DEPENDENCY  INJECTION  
  • 7.
    -­‐  CONSTRUCTOR  INJECTION   -­‐  SETTER  INJECTION   -­‐  INTERFACE  INJECTION  
  • 8.
    CONSTRUCTOR  INJECTION   class  Kalimat   {          protected  $filterstring;          public  funcGon  __construct(FilterString  $filterstring  )            {                  $this-­‐>filterstring  =  $filterstring  ;            }     }    
  • 9.
    SETTER  INJECTION   class  Kalimat   {          protected  $filterstring;          public  funcGon  setFilterString(FilterString  $filterstring  )            {                  $this-­‐>filterstring  =  $filterstring  ;            }     }    
  • 10.
    INTERFACE  INJECTION   interface  Kalimat   {          public  funcGon  setFilter(FilterString    $filterstring);   }    
  • 11.
    2  KELAS  (  SAMPLE  )….  
  • 12.
    <?php   class  FilterString   {          protected  $str;          public  funcGon  __construct($str)          {                  $this-­‐>str  =  ucfirst(  str_replace("  ","_",  $str)  );            }          public  funcGon  get()          {                  return  $this-­‐>str;            }   }  
  • 13.
    <?php   class  Kalimat  {          protected  $filterstring;          public  funcGon  __construct(FilterString  $filterstring)          {                  $this-­‐>filterstring  =  $filterstring;          }          public  funcGon  out()          {                  echo  'ouGng  ....  -­‐>  ';                  echo  $this-­‐>filterstring-­‐>get();          }   }  
  • 14.
    TANPA  ZENDDI   <?php   $filter  =  new  FilterString('saya  sedang  membaca');   $kalimat  =  new  Kalimat($filter);   $kalimat-­‐>out();  
  • 15.
    KITA  BUTUH  CONTAINER  !!!   -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐   /*   MENYIMPAN  OBJECT  DEFINITION  DAN   ENVIRONMENT,  MENG-­‐HANDLE   PENCIPTAAN  OBJECT   */  
  • 16.
    ZEND  FRAMEWORK  MEMPUNYAI   (  DEPENDENCY  INJECTION   COMPONENT  )  
  • 17.
    <?php   $di  =  new  ZendDiDi;   $di-­‐>instanceManager()                -­‐>setParameters('FilterString',  array(                                'str'  =>  'saya  sedang  membaca’   ));   $kalimat    =  $di-­‐>get('Kalimat');  //contains  FilterString  !   $kalimat-­‐>out();  
  • 18.
  • 19.
    ……………   public  funcGon  setFilterString(FilterString  $filterstring)   {          $this-­‐>filterstring  =  $filterstring;   }  
  • 20.
    $di  =  new  ZendDiDi();   $di-­‐>configure(new  ZendDiConfiguraGon(array(          'definiGon'  =>  array(                  'class'  =>  array(                          'Kalimat'  =>  array(                                  'setFilterString'  =>  array('required'  =>  true)                          )                  )          )   )));   $kalimat  =  $di-­‐>get('Kalimat',      array(  'str'=>'saya  sedang  membaca'  )  );   $kalimat-­‐>out();  
  • 21.
  • 22.
    Referensi  :   • h#p://www.picocontainer.org/injecGon.html     •  h#p://www.slideshare.net/fabpot/dependency-­‐ injecGon   •  h#p://mwop.net/slides/2011-­‐10-­‐18-­‐Zf2-­‐Overview/ Zf2Overview.html#slide15   •  h#p://akrabat.com/zend-­‐framework-­‐2/an-­‐ introducGon-­‐to-­‐zenddi/   Foto  :     •  h#p://www.as3dp.com/wp-­‐content/uploads/ 2010/10/dependencyInjecGon.png