Pimple を考える

Pimple とはなんぞや?ということで、ソースコードやドキュメントから、どのようなものかを判断してみた。(つまり実際に動作は確認していないw)

Pimple とは、Silex のベースとなっている PHP5.3 上で動作する DI コンテナとのこと。
公式サイト:
http://pimple.sensiolabs.org/

この1ページにさらっと書いてあることを読むと、使い方としては、

  1. コンテナを生成する(=Pimple オブジェクト)
  2. コンテナにパラメータを書く(=設定のこと。文字列、オブジェクトなど)
  3. コンテナにサービスを書く(=無名関数のこと。)
  4. コンテナからサービスを呼び出す

という流れになってるみたい。
コンテナ内でパラメータとサービスが分離できるので、 DIコンテナと呼んでいるのだろう。ArrayAccess インターフェースを実装しているため、配列操作と同じ感覚で利用できるのが特徴。
付加的な機能として、以下の3つがある。

  • Pimple::shared()
  • Pimple::protect()
  • Pimple::extend()

shared() は、一度生成した結果を使い回すことで、何度も同じ処理を実行することが避けられるもの。逆に、結果が毎回異なる場合は使えないだろう。
protect() は、DIの影響下から保護するための機能?いまいちピンとこない。
github をのぞいてみると、新しい機能として extend() なるものが追加されていた。既存のサービスをラップして機能拡張するためのもの?この機能は Phpmig の作者によるもののようだ。

Pimple の実装は1ファイルで完結しているため、このファイルをコピってくればすぐ使えるはず。もし興味があれば、ソースコードを読むこともお勧めしたい。