オレオレDIコンテナ@PHP

<?php
require '../NerimaDicon.php';
require 'Auth_Dto.php';
require 'interfase_Auth.php';
require 'mock_Auth_Dao.php';
NerimaDicon()

    // Config
    ->Config(Array
    (
        // 'dsn'=> 'pgsql:host=localhost;dbname=auth'
        // ,'user'=> 'postgres'
        // ,'pass'=> 'postgres'
        'dsn'=> 'sqlite:'.basename(__FILE__,'.php').'.db'
        ,'user'=> ''
        ,'pass'=> ''
    ))

    // Dto
    ->Dto(NerimaDicon::Factory()
        ->Auth_Dto()
            ->id('test')
            ->pass('test'))

    // Dao
    ->Dao(NerimaDicon::Factory()->Auth_Dao('Config'))
;

// user add test
NerimaDicon::Namasu(NerimaDicon()->Dao->add
(
    NerimaDicon()->Dto
)
->should->be(True);

// user no get test
NerimaDicon::Namasu(NerimaDicon()->Dao->get
(
    NerimaDicon::Factory()->Auth_Dto()
        ->no(NerimaDicon('Dto')->no)
)
->should->be
(
    NerimaDicon('Dto')
);

// user session get test
NerimaDicon::Namasu(NerimaDicon()->Dao->get
(
    NerimaDicon::Factory()->Auth_Dto()
        ->session(NerimaDicon('Dto')->session)
)
->should->be
(
    NerimaDicon('Dto')
);

// user id:pass get test
NerimaDicon::Namasu(NerimaDicon()->Dao->get
(
    NerimaDicon::Factory()->Auth_Dto()
        ->id(NerimaDicon('Dto')->id)
        ->pass(NerimaDicon('Dto')->pass)
)
->should->be
(
    NerimaDicon('Dto')
);

オレオレDIコンテナを作ってみてる。

<?php
// NerimaDicon()
NerimaDicon()
    ->{$key}($value) // return $this
    ->{$key};// return NerimaDicon($name)

// NerimaDicon::Factory
NerimaDicon::Factory()
    ->{$className}($NerimaDicon_keyName);

てけとーにシングルトンなクラス作って
其処に必要なリテラルとかぶち込む

コンストラクタインジェクションをする為の
NerimaDicon::Factory()を使って、インスタンスを作る
その際に、コンテナのキー値を使って値を取得する

んで、作ったインスタンスもコンテナにぶち込む

NerimaDicon::Namasu()に作ったインスタンスのメソッドの返り値を
ぶち込んで、何かと比較する。

多分、こんなんでBDDっぽく、テケトーに振る舞いを示唆しながら
の実装出来るんじゃないかな。まぁ様は仮想コードを使って動作の流れを
考えるのを、マジックメソッドのオンパレードを使って、

動く、仮想コードに仕立て上げとくと、書くのと考えるのを剥離させなくて
済むかなっと。

って、ここらへんの書くのと考えるのが一番離れていない言語は
Pythonかなぁっと思ったりも。