Можно ли преобразовать массив в _call
в список аргументов функции каким-то образом и заставить код работать?
abstract class FooClass {
protected function foo() {
$args = func_get_args();
$listIndex = 0;
foreach ($args as $arg) {
echo ++$listIndex . ": " . $arg . "\n";
}
}
}
class BarClass extends FooClass {
public function __call($name, $arguments) {
if (strcmp($name, 'foo') == 0) {
$this->$name(list($arguments));
}
die("Unexpected method.");
}
}
$barInstance = new BarClass;
$barInstance->foo("one", "two", "three", "four");
Хорошо, как оказалось, то, о чем я просил, возможно. Вот фиксированный код:
abstract class FooClass {
protected function foo() {
$args = func_get_args();
$listIndex = 0;
foreach ($args as $arg) {
echo ++$listIndex . ": " . $arg . "\n";
}
}
protected function fooz() {
echo "\nDone!\n";
}
}
class BarClass extends FooClass {
public function __call($name, $arguments) {
if (in_array($name, array('foo', 'fooz'))) {
call_user_func_array(array($this, $name), $arguments);
} else {
die("Unexpected method.");
}
}
}
$barInstance = new BarClass;
$barInstance->foo("one", "two", "three", "four");
$barInstance->fooz();
и вот вывод:
1: one
2: two
3: three
4: four
Done!
Других решений пока нет …