本周早些时候我看到了一段代码(不幸的是,我无法检索),我对作者实施__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 ×1