我创建了一个 __call() 方法来动态加载方法。我想解决的一个问题是 __call() 将调用传递的所有参数组成一个数组。这是我的代码
public function __call($method, $params)
{
if (count($params) <= 1)
$params = $params[0];
foreach (get_object_vars($this) as $property => $value) {
$class = '\\System\\' . ucfirst(str_replace('_', '', $property)) . '_Helper';
if (strpos($method, str_replace('_', '', $property)) !== false) {
if (!in_array($class, get_declared_classes()))
$this->$property = new $class($params);
$error = $method . ' doesn\'t exist in class ' . $class;
return (method_exists($class, $method) ? $this->$property->$method($params) : $error);
}
}
}
问题是我可以解释只有一个参数的数组,但是我的一些方法接受了多个参数,这限制了 __call() 方法的动态性质。
如何将数组转换为动态传递的方法参数?
所以
array(0 => 'stuff1', 1 => 'stuff2');
可以作为
$this->->helper->test($param1, $param2);
代替
$this->helper->test($params);
使用当前的设计,我需要访问参数,例如
public function test($params)
{
print_r($params);
echo $param[0];
}
但我希望以传统方式使用它
public function test($param1, $param2)
{
echo $para1 . " " . $param2;
}
请记住,某些方法需要超过 2 个参数,原因是如果我包含不是我创建的传统样式类方法,我需要将所有参数调用转换为数组索引指针。
编辑:
根据答案
return (method_exists($class, $method) ? call_user_func_array(array($this->$property, $method), $params) : $error);
这行得通吗?