2010-12-11 74 views
5

我剛剛構建了一個函數,它獲取URI字符串並將其轉換爲數組,如下所示。這個例子是基於對http://mydomain.com/mycontroller/mymethod/varPHP:從數組中調用一個類?

Array 
(
    [0] => mycontroller 
    [1] => mymethod 
    [2] => var 
) 

如果我寫new $myArray[0];的URL,我會加載myController類,但我可以作出這樣的處理方法最終存及其他們的電話與各自變量的函數嗎?

回答

8

我不知道你所說意思「處理方法的最終存及其它們各自的變量調用」,但你可能是call_user_func_array後:

call_user_func_array(
    array($myArray[0], $myArray[1]), 
    array($myArray[2]) 
); 

如果你想這樣做對於您使用$controller = new $myArray(0)創建的具體實例,請將$myArray[0]替換爲$controller,例如

$controller = new $myArray(0); 
call_user_func_array(
    array($controller, $myArray[1]), 
    array($myArray[2]) 
); 

或通過new $myArray[0]如果你不有關實例護理呼叫

call_user_func_array(
    array(new $myArray[0], $myArray[1]), 
    array($myArray[2]) 
); 

後丟失否則,你會得到一個E_STRICT通知,並在任何myMethod是不能引用$this。另請參閱PHP manual on possible callback formats


爲了驗證方法和類的實際存在,你可以使用

例子:

if (method_exists($myArray[0], $myArray[1])) { 
    call_user_func_array(*/ … */) 
} 

請澄清你的疑問句如果還有其他意思的話。 On a sidenote, this was probably answered before,但由於我不確定問題是什麼,我也不確定選擇哪一個。

+0

用靜態方法纔會有效,否則你需要的類 – 2010-12-11 15:18:55

+0

@kemp不是真正的實例,倒是澄清。我認爲這就是你的意思。 – Gordon 2010-12-11 15:19:19

+0

你說得對,我的不好 – 2010-12-11 15:20:51

1

我想這也將工作:

$obj = new $myArray[0]; 
$obj->{$myArray[1]}($myArray[2]); 
相關問題