Welcome to Abdul Malik Ikhsan's Blog

Zend Framework 2 : Dependency Injection

Posted in Tutorial PHP, Zend Framework 2 by samsonasik on April 5, 2012

Zend Framework 2 menghadirkan komponen baru, yaitu Dependency Injection Container Component. Komponen ini berada pada package Zend\Di yang nantinya akan jadi container dari kelas yang kita buat.

Ok, saya akan mencoba memberi contoh sederhana. Anggaplah kita mempunyai 2 kelas sebagai berikut :

class FilterString
{
    protected $str;
    public function __construct($str)
    {
        $this‐>str = ucfirst( str_replace(" ","_", $str) );
    }
    public function get()
    {
        return $this-­>str;
    }
}
////////////////
class Kalimat
{
    protected $filterstring;
    public function __construct(FilterString $filterstring )
    {
        $this->filterstring = $filterstring ;
    }
}

“Kalimat” harus mempunyai “FilterString”. maka kita harus menciptakan dulu object dari kelas FilterString seperti berikut:

$filter = new FilterString('saya sedang membaca');
$kalimat = new Kalimat($filter);
$kalimat‐>out();

Dengan Zend\Di, kita tak perlu membuat dulu object dari kelas FilterString, bisa dituliskan seperti berikut :

$di = new Zend\Di\Di;
$di‐>instanceManager()
   ->setParameters('FilterString', array( 'str' => 'saya sedang membaca’
));
$kalimat = $di‐>get('Kalimat'); //contains FilterString !
$kalimat‐>out();

Bagaimana jika menggunakan setter ? misal kita ubah class kalimat menjadi seperti berikut :

class Kalimat {
    protected $filterstring;

    public function setFilterString(FilterString $filterstring)
    {
        $this->filterstring = $filterstring;
    }

    public function out()
    {
        echo 'outing .... -> ';
        echo $this->filterstring->get();
    }
}

Maka, cara penggunaanya seperti berikut :

$di = new \Zend\Di\Di();
$di‐>configure(new \Zend\Di\ConfiguraGon(array(
    'definition' => array(
        'class' => array(
            'Kalimat' => array(
                'setFilterString' => array('required' => true)
            )
        )
    )
)));

$kalimat = $di‐>get('Kalimat', array( 'str'=>'saya sedang membaca' ) );
$kalimat->out();

Done !!!

Referensi :
http://www.picocontainer.org/injection.html
http://www.slideshare.net/fabpot/dependency-injection
http://mwop.net/slides/2011-10-18-Zf2-Overview/Zf2Overview.html#slide15
http://akrabat.com/zend-framework-2/an-introduction-to-zenddi/

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: