相关疑难解决方法(0)

使用显式参数调用函数与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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
$obj = new Sample();
$obj->test("Hello World"); // Would be called via switch label 1 …
Run Code Online (Sandbox Code Playgroud)

php

11
推荐指数
1
解决办法
4138
查看次数

标签 统计

php ×1