2012-11-26 24 views
4

例如,我有類MyClass的動態類的方法調用由數組鏈接值

Class MyClass { 

    public function method_1() { 
     return $this; 
    } 

    public function method_2() { 
     return $this; 
    } 

    public function method_n() { 
     return $this; 
    } 
} 

我有功能和它們的參數數組:

$array = array(
    'method_1' => array(
     '0' => 'first_argument', 
     '1' => 'second_argument', 
     '2' => 'nth_argument', 
    ), 
    'method_2' => array(
     '0' => 'first_argument', 
     '1' => 'second_argument', 
     '2' => 'nth_argument', 
    ), 
); 

如何調用MyClass從方法鏈中的數組?

$result = $my_class->$array['method_1']($array['method_1'][0], $array['method_1'][0]) 
    ->$array['method_1']($array['method_2'][0], $array['method_2'][0]) 
    ->$array['method_n']($array['method_n'][0], $array['method_n'][0]); 

例如:

foreach($array as $function => $args) { 
    // build chain here and execute after foreach 
} 

所以,主要的問題是如何調用的類函數無限的未知數量與鏈參數呢?謝謝!

回答

4

把你$array['method_*']{}括號:

$result = $my_class->{$array['method_1']}($array['method_1'][0], $array['method_1'][0]) 
    ->{$array['method_1']}($array['method_2'][0], $array['method_2'][0]) 
    ->{$array['method_n']}($array['method_n'][0], $array['method_n'][0]); 

如果我可能會注意到,儘管PHP允許這一點,代碼的可讀性和可靠性,您應該重新考慮有關動態鏈調用。它可以爲您節省幾行,但可能會引發一些麻煩以後調試

//附錄: IMO,更好地做你的邏輯的方法是通過foreachcall_user_func_array()

foreach ($array as $method => $args) { 
    call_user_func_array(array($my_class, $method), $args); 
} 
+0

嗯..請問它在工作'foreach($ array爲$ function => $ args)'? – Orbitum

+0

是的,但是沒有鏈接關係 –

+0

@Orbitum:當然,只要確保在整個循環中重命名'$ method'變量。 –