2010-02-16 3 views
0

У меня есть класс «ABC», с несколькими функциями внутри него: «abc_function1» «abc_function2» «abc_function3» «abc_function4» «abc_function5»PHP -> вызов функции в соответствии с параметром прохождения

Я хотел бы назвать функцию класса 'abc' в соответствии с параметром, который я вводим, например, строка, содержащая «function1» или «function 4», чтобы ссылаться на соответствующую функцию класса.

я надеюсь, что я ясно;)

Большое спасибо за вашу помощь

ответ

0
$class_instance = new class(); 
call_user_func( 
    array($class_instance, $your_string_containing_the_fx_name), 
    $the_parameters_you_want_to_pass 
); 
5

Не совсем уверен, почему, но это имеет определенный код запах, на мой взгляд. Но в любом случае ...

Метод 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

0

Вы можете использовать функция variable functions PHP:

function call_function($string) { 
    $var = 'abc_' . $string; 
    $retval = $var(); // this will call function named 'abc_' 
         // plus the contents of $string 
    return $retval; 
} 
Смежные вопросы