Не совсем уверен, почему, но это имеет определенный код запах, на мой взгляд. Но в любом случае ...
Метод a): Реализовать метод «магия» __call($name, $params).
<?php
class Foo {
public function abc_function1() {
echo "function #1";
}
public function abc_function2() {
echo "function #2";
}
public function abc_function3() {
echo "function #3";
}
public function __call($name, $params) {
$fqn = 'abc_'.$name;
if (method_exists($this, $fqn)) {
call_user_func_array(array($this, $fqn), $params);
}
}
}
$f = new Foo;
$f->function2();
Метод b): та же идея, только без автоматического отображения.
<?php
class Foo {
public function abc_function1() {
echo "function #1";
}
public function abc_function2() {
echo "function #2";
}
public function abc_function3() {
echo "function #3";
}
public function doSomething($x, $y, $z) {
$fqn = 'abc_'.$x;
if (method_exists($this, $fqn)) {
call_user_func_array(array($this, $fqn), array($y, $z));
}
}
}
$f = new Foo;
$f->doSomething('function2', 1, 2);
Метод с) Если вы знаете номер параметра вы можете также использовать
$this->$fqn($,y, $z)
вместо
call_user_func_array((array($this, $fqn), array($y, $z));
Смотри также: http://docs.php.net/call_user_func_array и http://docs.php.net/functions.variable-functions