我正在努力,我需要能夠將索引的數組傳遞給方法,很像call_user_func_array
的工作原理。我會使用call_user_func_array
,但它不是一個OOP方法,這是不受歡迎的,它要求方法是靜態的,這會打破目標類的OO。動態調用類方法的參數
我曾嘗試使用ReflectionClass
但無濟於事。你不能調用參數給類的方法,只能調用構造函數。這是不幸的,不是渴望的。
所以我把手冊頁,看着ReflectionFunction
,但沒有辦法實例化的類,它指向一個方法,然後invokeArgs
它。
實施例使用ReflectionFunction
(記住,這一問題被標記PHP 5.4,因此語法):
$call = new \ReflectionFunction("(ExampleClass())->exampleMethod");
$call->invokeArgs(["argument1", "argument2"]);
此失敗:
Function (Index())->Index() does not exist
使用實施例ReflectionMethod
$call = new \ReflectionMethod("ExampleClass", "exampleMethod");
$call->invokeArgs(new ExampleClass(), ["argument1", "argument2"]);
print_r($call);
這失敗:
ReflectionMethod Object
(
[name] => Index
[class] => Index
)
參數永遠不會傳遞給方法。
期望的結果是:
class ExampleClass() {
public function exampleMethod($exampleArg1, $exampleArg2){
// do something here
echo "Argument 1: {$exampleArg1}\n";
echo "Argument 2: {$exampleArg2}\n";
}
}
$array = [ 'exampleArg1Value', 'exampleArg2Value' ];
如果我通過$array
到的ExampleClass->exampleMethod()
一個實例,我將僅具有一個參數,這將是一個數組。相反,我需要能夠拉動個別論點。
我在想,如果有一種方法可以在ReflectorClass
上撥打ReflectorFunction
我會以船形和我的方式,但它看起來不是這樣。
有沒有人有他們曾經用來完成此事的任何事情?
是的,它應該只是工作,你可以在這裏輕鬆地檢查PHP版本:http://3v4l.org/JUKK9#v547 - 注意你的類不是來自其他命名空間或其他東西。 – hakre