This repository has been archived by the owner. It is now read-only.
A Dependency Injection Container that fits in a tweet
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


What is Twittee?

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(
      'auth'     => 'login',
      'username' => $c->mailer_username,
      'password' => $c->mailer_password,
      'ssl'      => 'ssl',
      'port'     => 465,
$c->mailer = function ($c) {
  $obj = new $c->mailer_class();
  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.

Looking for a "real" Dependency Injection Container for PHP?

Try the Symfony Service Container.

Do you like Twittee?

If you like Twittee, you will also probably like Twitto, the Web Framework that fits in a tweet!