Не совсем уверен, почему, но, на мой взгляд, это имеет определенный запах кода. Но все равно ...
Метод 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();
Метод б): та же идея, только без автоматического отображения.
<?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);
Метод c) Если вы знаете номер параметра, вы также можете использовать
$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