Вызов функции с явными параметрами по сравнению с call_user_func_array ()

Ранее на этой неделе я видел фрагмент кода (который, к сожалению, мне не удалось получить), и мне любопытно, как автор реализовал __ call () магический метод. Код выглядел примерно так:

class Sample
{
    protected function test()
    {
        var_dump(func_get_args());
    }
    public function __call($func, $args)
    {
        if(!method_exists($this, $func))
        {
            return null;
        }
        switch(count($args))
        {
            case 0:
                return $this->$func();
            case 1:
                return $this->$func($args[0]);
            case 2:
                return $this->$func($args[0], $args[1]);
            case 3:
                return $this->$func($args[0], $args[1], $args[2]);
            case 4:
                return $this->$func($args[0], $args[1], $args[2], $args[3]);
            case 5:
                return $this->$func($args[0], $args[1], $args[2], $args[3], $args[4]);
            default:
                return call_user_func_array($this->$func, $args);
        }
    }
}
$obj = new Sample();
$obj->test("Hello World"); // Would be called via switch label 1

Как видите, автор мог просто использовать call_user_func_array () и полностью отказаться от переключателя, так что это заставит меня поверить в то, что это было (надеюсь) какие-то разумные доводы за этим.

Единственная причина, о которой я мог подумать, - это, возможно, некоторые накладные расходы на вызов функции call_user_func_array () , но это не кажется достаточно хорошей причиной для использования кучи операторов case. Есть ли здесь угол, который я не понимаю?

11
задан Tim Cooper 1 December 2011 в 15:00
поделиться