Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A Dependency Injection Container that fits in a tweet
PHP
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
README.markdown
twittee.php

README.markdown

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!

Usage

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.

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!

Something went wrong with that request. Please try again.