У меня проблема с кодом, связанная с тем, что я использую определенные библиотеки кода, которые я не могу изменить.
Я использую следующий код, чтобы передать выполнение любых неопределенных методов другому классу, и он работает нормально, но это похоже на удвоение затрат.
Есть предложения?
По сути, я хочу знать, возможно ли передать неизвестное количество параметров методу (без использования call_user_func_array()
, на случай, если их нужно будет передать по ссылке). Я не спрашиваю, как использовать func_get_args()
, а наоборот.
Или я должен просто разрешить еще несколько аргументов в первом логическом пути (код list()
)?
class Foo {
__construct() {
$this->external = new ClassThatIHaveNoControlOver();
}
function bar($name) {
return 'Hi '.$name;
}
function __call($method, $arguments) {
if (count($arguments) < 3) {
// call_user_func_array won't pass by reference, as required by
// ClassThatIHaveNoControlOver->foobar(), so calling the function
// directly for up to 2 arguments, as I know that foobar() will only
// take 2 arguments
list($first, $second) = $arguments + Array(null, null);
return $this->external->$method($first, $second);
} else {
return call_user_func_array(array($this->external, $method), $arguments);
}
}
}
$foo = new Foo();
$firstName = 'Bob';
$lastName = 'Brown';
echo $foo->bar($firstName); // returns Hi Bob as expected
echo $foo->foobar($firstName, $lastName); // returns whatever
// ClassThatIHaveNoControlOver()->foobar() is meant to return
EDIT
Просто чтобы уточнить, я знаю, что могу использовать этот метод для перенастройки параметров в качестве ссылок, но это будет означать передачу всего в качестве ссылки, даже если метод не требует этого - чего я пытался избежать , но в настоящий момент кажется маловероятным.