DIコンテナ
Dependency Injection Container
PHP-DIがいいこと言ってて、インスタンス作成と依存性注入作業を全て巻き取るツール
IoCコンテナ (inversion of control)ともいう
制御の反転という意味
なぜ反転なのかはこの文章読むとめっちゃ腑に落ちる
DIパターンを駆使するための実装パターン
類似実装としてサービスロケータがある
この記事が非常に分かりやすい
PHPの代表的なもの
aura.di
必要最低限機能をそろえた軽量DIコンテナ
シリアライズするので早いらしい
程よく縛りがあるので学習するには一番良い気がする
コンテナロックの話や、サービスロケータとして使おうとするとメソッドが違うところとか
コンストラクタインジェクション、セッターインジェクションをサポート
pimple
シンプルなのが売り
使用者に工夫が一任されてる感じ。本当に必要最低限
やり方次第ではコンストラクタインジェクションもセッターインジェクションも可能
サービスロケータとしても使えちゃう
Dice
本体のコードが100行と、軽さを売りにしてる
autowritingが基本なのでpimpleとの違いはそこかな
コンストラクタインジェクション、セッターインジェクションをサポート
PHP-DI
フルスタックDIという感じ
有名どころのFWのDIコンテナがこいつベースになってる
アノテーションによるフィールドインジェクションをサポート
Orno\Di
古い。もう使わないほうがよさげ
他との特徴はメソッドチェーンとMemcached(なぜか)でのキャッシュ対応くらい?
キャッシュはそんなに早くなると思えない…
Auryn
Symfony\Dependency-Injection
様々な実装方法が存在する
コンストラクタインジェクション
コンストラクターに必要なインスタンスを渡す
インスタンス生成時に依存するものが揃ってる必要がある
セッターインジェクション
依存性注入のためのセッターメソッドを用意する
setCache(Cache $cache) { $this->cache = $cache; } みたいな
参考
有名どこのDIコンテナのベンチ比較
#DI #設計