概要
以下のDIコンテナを利用してみようと思いましたが、
仕組みが分からなかったので調べた際のメモとなります。
https://github.com/silexphp/Pimple
公式で紹介されていた使い方
use Pimple\Container;
$container = new Container();
$container['session_storage'] = function ($c) {
return new SessionStorage('SESSION_ID');
};
$container['session'] = function ($c) {
return new Session($c['session_storage']);
};
$session = $container['session'];
分かっていなかったこと
$cにPimple\Containerオブジェクトが設定される仕組み
実装を確認して見て分かったこと
Containerクラスが実装しているArrayAccessの
offsetGet($id)内で$thisが渡されていたためでした。
使い方を確認しただけでは分かりませんでしたが、実装を見て納得できました。
offsetGet($id)メソッドの該当箇所抜粋
if (isset($this->factories[$this->values[$id]])) { |
return $this->values[$id]($this); < この箇所
}