Магические методы __Call не работает с несколькими аргументами - PullRequest
0 голосов
/ 31 декабря 2011

У меня проблема с магическим методом __call

Следующий код работает хорошо, за исключением случаев, когда в вызове метода есть более одного аргумента. Я пробовал разные решения без какого-либо хорошего результата (просто $args или implode(', ' $args) не работает)

public function __call($method, $args) {
    if($this->methods[$method] != NULL)
            return $this->objects[$this->methods[$method]]->$method($args[0]);
    else    trigger_error("Call undefined method " . $this->class . "::" . $method, E_USER_ERROR);
}

Это тоже работает, если я напишу это так:

return $this->objects[$this->methods[$method]]->$method($args[0], $args[1], $args[3]);

Но, как вы можете видеть, это не правильно, потому что функция может иметь от 0 до бесконечных аргументов.

Знаете ли вы, как исправить сценарий для нескольких аргументов?

1 Ответ

8 голосов
/ 31 декабря 2011
return call_user_func_array($this->objects[$this->methods[$method]]->$method, $args);

См. http://php.net/call_user_func_array.

...