为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
胡说叔叔 2019-03-18 16:53:39
Laravel 5.1 的 Facade 类 的 __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); }
查看完整描述

8 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

题主是不是看错了或者看的是修改过的源码,原始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);
    }
查看完整回答
反对 回复 2019-03-18
?
Helenr

TA贡献1780条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-18
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-03-18
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

三个...不定参数的写法是php 5.6版本才有的新特性,我猜可能框架5.1版本的时候还没支持php新特性的吧

查看完整回答
反对 回复 2019-03-18
  • 8 回答
  • 0 关注
  • 629 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信