gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

「似非DIコンテナのようなものもどき」作りました〜

もっそ微妙w
メモかねて。


先に使い方。
・configに「di_config」でDI用の設定ファイル名を書く
・di_configの書式例

# 仮想クラス名 = includeファイル名:newしたいクラス名
#-------------------------------------------------------

# 基本書式
cgi_request = cgi_request_with_emoji.inc:cgi_request_with_emoji

# 省略書式その1。includeファイルは「クラス名 + .inc」
view = :view_mobile

# 省略書式その2。includeファイルは「設定したディレクトリ + クラス名 + .inc」
hoge = common/:hoge_advance

で、使用例。
include(正確にはrequire_once)はDI側でやってくれるので気にせず。

// インスタンスげと〜
$obj = DI::create('hoge');

// staticなクラスの場合(5.2-
call_user_func( array(DI::get_name('hoge'), 'callしたいメソッド名')[, 引数があれば]);

// staticなクラスの場合(5.3+
// XXX 未テスト。もしかしたら一回、名前を変数に入れないとダメかもしれない
(DI::get_name('hoge'))::callしたいメソッド名(引数があれば);


んで、裏側にあるもにょもにょ。
まず初めに。「あんたDIのことdisってたよねぇ http://d.hatena.ne.jp/gallu/20060822/p2 」という話は甘んじてうけますっていうか今でもあんまりその辺のスタンスは変わらず。
ただ一方で http://d.hatena.ne.jp/gallu/20071218/p2 にも書いたとおり「一部では」使いやすいことに気づいて。
で…その「一部」ん中に、フレームワークがあることに気づきました。


っても、そんなにごっつくたいしたことやっているわけではぜんぜんないゆえんが似非だったりようなだったりもどきだったりするゆえんですが。
えと…例えば、こんな1文があります。

$obj = new cgi_request();

ここで「やっていること」は「cgi_requestクラスのインスタンスを作っている」のですが。
ここで「やりたいこと」は、別に「cgi_requestクラスのインスタンスを作りたい」わけではなくて、厳密には「CGIのrequestを包括してあつかってくれるようなもにょもにょなクラスのインスタンスを作りたい」わけですよね?


なので。
今回、DIコンテナっぽいものを作って、この辺を一段、抽象化してみたという寸法です。


リアルソースは一両日中くらいに上げておきますんで、質問その他あったらよろです。
一応、既存のと互換性保てるようには作ったつもりではあるのですが。もしかしたら微妙に怪しい可能性が、否定はできないので。