Ama neden bu bence belli bir kod kokusu vardır tam olarak emin değil. Ama yine de ...
Yöntem a): "sihirli" yöntemi uygulamak __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();
Metot b): sadece Automagical eşleme olmadan aynı fikir.
<?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);
Yöntem c) Eğer parametre numarasını biliyorsanız siz de kullanabilirsiniz
$this->$fqn($,y, $z)
yerine
call_user_func_array( (array($this, $fqn), array($y, $z) );
ayrıca bakınız: http://docs.php.net/call_user_func_array ve http://docs.php.net/functions.variable-functions