Twittee is the smallest, and still useful, Dependency Injection Container in PHP; it is also probably one of the first public software to use the newest anonymous functions support of PHP 5.3.
Packed in less than 140 characters, it fits in a tweet.
Despite its size, Twittee is a full-featured Dependency Injection Container with support for object definitions, object injection and parameters.
Published in 2009 by Fabien Potencier, Twittee is in the Public Domain. Tweet me if you find a bug!
Finding a simple example to demonstrate a Dependency Injection Container is not an easy task. Instead of showing a classic "Hello World!" example, which would have been too simple to demonstrate the power of Twittee, I have converted the example I used to introduce the Symfony 2 Dependency Injection Container on my blog.
The following example shows how to create a Zend_Mail object that sends its emails using a Gmail account:
$c = new Container();
// parameters
$c->mailer_class = function () { return 'Zend_Mail'; };
$c->mailer_username = function () { return 'fabien'; };
$c->mailer_password = function () { return 'myPass'; };
// objects / services
$c->mailer_transport = function ($c) {
return new Zend_Mail_Transport_Smtp(
'smtp.gmail.com',
array(
'auth' => 'login',
'username' => $c->mailer_username,
'password' => $c->mailer_password,
'ssl' => 'ssl',
'port' => 465,
)
);
};
$c->mailer = function ($c) {
$obj = new $c->mailer_class();
$obj->setDefaultTransport($c->mailer_transport);
return $obj;
};
// get the mailer
$mailer = $c->mailer;
Some explanations about the code are in order:
-
Parameters are defined by anonymous functions that return strings;
-
Objects/services are defined by anonymous functions that return object instances;
-
Links between objects and parameters access are done by accessing the container, which is passed to the anonymous function as an argument.
Try the Symfony Service Container.
If you like Twittee, you will also probably like Twitto, the Web Framework that fits in a tweet!