2016-07-07 58 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(); 
相關問題