ログ日記

作業ログと日記とメモ

設定ファイル変数を使ったメソッドインジェクションできた

これでオブジェクトのコンストラクタ引数にメソッドの実行結果を使えるようになった。

<?php
class SomeComponent
{
    private $obj;
    private $key;
    private $id;
    public function __construct(OtherComponent $a, $key, $id)
    {
        $this->obj = $a;
        $this->key = $key;
        $this->id  = $id;
    }

こういうクラスがあるとき

; SomeComponent.ini
[main]
constructor = id,$id
$id = Request.get.id

こういう設定ファイルを書くと、

<?php
...
$container->register('SomeComponent', new SomeComponent($otherComponent, 'id', $request->get('id')));

的なことが行われる。
つまり、

<?php
class SomeAction
{
    public function execute(SomeComponent $someComponent){
        ...
    }
}

と書くと、自動的にOtherComponentオブジェクト、'id'文字列、Request->get('key')実行結果を引数にして生成されたSomeComponentオブジェクトを受け取れる。
これでやっとまともなDIコンテナっぽくなったかな。そう呼ぶことはしないけど。