php类函数 - >根据传递参数调用该函数

时间:2010-02-16 23:50:37

标签: php function parameters class

我有一个'abc'类,里面有几个函数: 'abc_function1' 'abc_function2' 'abc_function3' 'abc_function4' 'abc_function5'

我想根据我输入的参数调用类'abc'的函数,例如,包含'function1'或'function 4'的字符串,以引用类的相应函数。

我希望我已经明白了;)

非常感谢你的帮助

3 个答案:

答案 0 :(得分: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);

方法c)如果您知道参数的数量,也可以使用

$this->$fqn($,y, $z)

而不是

call_user_func_array( (array($this, $fqn), array($y, $z) );

另请参阅:http://docs.php.net/call_user_func_arrayhttp://docs.php.net/functions.variable-functions

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用PHP的variable functions功能:

function call_function( $string ) {
    $var = 'abc_' . $string;
    $retval = $var(); // this will call function named 'abc_'
                      // plus the contents of $string
    return $retval;
}