2017-08-02 6 views
3

私は、以下に示すコードと同様の属性とメソッドを持つクラスを持っています。アイデアは、ディスパッチ配列内の要素を呼び出すことであり、その要素に対してリストされたメソッドは、リストされている順序で実行されます。私はメソッドを実行する方法について固執しています(execute()メソッドを参照)。これも可能ですか?配列にリストされたメソッドを実行する

コンストラクタでsetDispatch()が呼び出されますが、これは以下のコードには示されていません。

// attribute 
 
private $_dispatch = []; 
 

 
// methods 
 
public function execute() 
 
{ 
 
    $dispatch = $this->getDispatch(); 
 
    // NEED LOGIC HERE THAT EXECUTES METHODS LISTED IN $dispatch['A'] 
 
} 
 

 
private function setDispatch() 
 
{ 
 
    $this->_dispatch = [ 
 
    'A' => [ 
 
     'method1', 
 
     'method2', 
 
     'method3' 
 
    ], 
 
    'B' => [ 
 
     'method4', 
 
     'method3', 
 
     'method1' 
 
    ] 
 
    ]; 
 
} 
 
    
 
private function getDispatch() 
 
{ 
 
    return $this->_dispatch; 
 
} 
 

 
private function method1() 
 
{ 
 
    //do something 
 
} 
 

 
private function method2() 
 
{ 
 
    //do something 
 
} 
 

 
private function method3() 
 
{ 
 
    //do something 
 
} 
 

 
private function method4() 
 
{ 
 
    //do something 
 
}

答えて

6

私はあなたがcall_user_funcphp call class function by string name

が、それはあなたのケースであるようcall_user_funcが動作しません、あなたはその方法を意味しているcallback syntaxを使用する必要があることに注意してください好きになると信じて名前はオブジェクトへのリンクを持つ配列でなければなりません:[$object, $methodName]

// attribute 
private $_dispatch = []; 

// methods 
public function execute() 
{ 
    $dispatch = $this->getDispatch(); 
    foreach($dispatch['A'] as $methodName){ 
    call_user_func([$this, $methodName]); 
    } 
} 

private function setDispatch() 
{ 
    $this->_dispatch = [ 
    'A' => [ 
     'method1', 
     'method2', 
     'method3' 
    ], 
    'B' => [ 
     'method4', 
     'method3', 
     'method1' 
    ] 
    ]; 
} 

private function getDispatch() 
{ 
    return $this->_dispatch; 
} 

private function method1() 
{ 
    //do something 
} 

private function method2() 
{ 
    //do something 
} 

private function method3() 
{ 
    //do something 
} 

private function method4() 
{ 
    //do something 
} 
関連する問題