関数を起動する方法

karintoの関数起動でいろいろやったけど、どうもReflectionFunction::invokeの引数にオブジェクトを渡しても参照渡しにならないみたい。参照渡しにしたい場合は明示的に&を引数の先頭に付けないとダメなようだ。この辺の使い勝手はcall_user_func_array関数と変わらんな…。

我ながらどうかと思うコードを書いてみた。

<?php
$reflection = new ReflectionFunction($function);
switch ($reflection->getNumberOfParameters()) {
case 2:
    $function($req, $res);
    break;
case 3:
    $session = new karinto_session($res);
    $function($req, $res, $session);
    break;
default:
    $res->status(404);
    break;
}

http://code.google.com/p/karinto/source/browse/trunk/karinto.php?r=51