call — PHP: преобразовать массив в список аргументов функции

Можно ли преобразовать массив в _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");

0

Решение

Хорошо, как оказалось, то, о чем я просил, возможно. Вот фиксированный код:

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!
0

Другие решения

Других решений пока нет …