2016-07-07 53 views
0

我有一个数组填充了几个类方法,我可以随机调用一些这些方法进行测试。 下面的代码是我想要做的工作,但是,我只是获取方法的名称,它没有执行。从数组值运行一个方法

例如,可以说1返回到$methodIndex,我找回func2()而不是Hello Func2

有没有PHP的功能来做到这一点或简单的解决方法?

class A{ 

    public function func1() { echo "Hello Func1"; } 
    public function func2() { echo "Hello Func2"; } 
    public function func3() { echo "Hello Func3"; } 

    private $methods = ['func1', 'func2', 'func3']; 

    public function get_methods(){ return $methods; } 
} 

$object = new A(); 

$methodIndex = mt_rand(0, count($object->get_methods()) - 1); 
$object->get_methods()[$methodIndex]."()"; //e.g. $object->func2(); 
+0

我认为这会让你指向正确的方向:http://stackoverflow.com/questions/16740112/php-call-class-function-by-string-name – Alderin

回答

2

我认为你正在寻找call_user_func(显示短阵语法)

call_user_func([$object, $object->get_methods()[$methodIndex]]); 
+0

这对我有效。谢谢 – hello

0

这将是沿

$functionName = get_methods()[$methodIndex]; 
call_user_func(array($object, $functionName)) 
0

行就是这样:-)

东西
class A{ 

    public function func1() { echo "Hello Func1"; } 
    public function func2() { echo "Hello Func2"; } 
    public function func3() { echo "Hello Func3"; } 

    private $methods = ['func1', 'func2', 'func3']; 

    public function get_methods(){ return $methods; } 

    public function random(){ 
     $method = $this->methods[rand(0, (count($this->methods) - 1))]; 

     if(is_callable(array($this, $method))){ 
      return call_user_func_array(array($this, $method), func_get_args()); 
      } 
     } 
    } 

$object = new A(); 

$object->random(); 
相关问题