PHP 的 call_user_func_array 方法是否效率很低?

Laravel 5.1Facade 类 的 __callStatic 方法代码如下:

public static function __callStatic($method, $args)
{
    $instance = static::getFacadeRoot();

    if (! $instance) {
        throw new RuntimeException('A facade root has not been set.');
    }

    switch (count($args)) {
        case 0:
            return $instance->$method();

        case 1:
            return $instance->$method($args[0]);

        case 2:
            return $instance->$method($args[0], $args[1]);

        case 3:
            return $instance->$method($args[0], $args[1], $args[2]);

        case 4:
            return $instance->$method($args[0], $args[1], $args[2], $args[3]);

        default:
            return call_user_func_array([$instance, $method], $args);
    }
}

为什么不直接写成:

public static function __callStatic($method, $args)
{
    $instance = static::getFacadeRoot();

    if (! $instance) {
        throw new RuntimeException('A facade root has not been set.');
    }

    return call_user_func_array([$instance, $method], $args);
}
胡说叔叔
浏览 630回答 8
8回答

ibeautiful

题主是不是看错了或者看的是修改过的源码,原始laravel中并没有发现存在这些代码,能否标出具体的laravel版本和文件路径 我看到的laravel的 Facade 类中代码是这样的 /** * Handle dynamic, static calls to the object. * * @param string $method * @param array $args * @return mixed * * @throws \RuntimeException */ public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); if (! $instance) { throw new RuntimeException('A facade root has not been set.'); } return $instance->$method(...$args); }

Helenr

这问题我也纳闷. mark, 看会不会遇到能解答这个问题的人.

梵蒂冈之花

额 题主是什么版本的啊? 感觉跟楼上就几个同学看到的一样啊

犯罪嫌疑人X

三个...不定参数的写法是php 5.6版本才有的新特性,我猜可能框架5.1版本的时候还没支持php新特性的吧
打开App,查看更多内容
随时随地看视频慕课网APP