Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A Dependency Injection Container that fits in a tweet

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 README.markdown fixed markdown April 03, 2009
Octocat-spinner-32 twittee.php Changed visibility of Container::$s to private January 18, 2014
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! Installation

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.