2012-10-09 89 views
0

我想從我的一個對象調用靜態方法。如果我知道對象的名字,這是沒有問題的,但在這種情況下,我不知道。
我有一個數組對象的名稱,我想從這個數組元素之一調用方法。因此,它看起來像這樣:來自未知對象的靜態方法調用

function call_method($key) { 
    $tmp = array('key1' => 'objectname1','key2' => 'objectname2','key3' => 'objectname3'); 
    if(array_key_exists($key, $tmp)) { 
     $tmp::static_method(); 
    } 
} 

但是,此解決方案不起作用。有人知道如何做到這一點嗎?

+1

「不工作」是一個非常廣泛的問題。你有錯誤嗎?它是致命的嗎?它是什麼?你沒有得到你的期望?如果不是,你期望什麼? –

回答

3

$tmp是一個數組,因此它沒有與它關聯的靜態方法。您需要查看該值並使用它:

// this will work for newer versions of PHP 
$klass = $tmp[$key]; 
$klass::static_method(); 

// in some older versions, you may need to use call_user_func: 
call_user_func(array($klass, 'static_method') /*, your args here */); 
+0

謝謝,這有很大的幫助。我必須使用call_user_func(...)。現在它正在工作。 :-) – Shimu

2

現在,您正試圖調用該數組的靜態函數。你應該這樣做:

if(array_key_exists($key, $tmp)) { 
    $tmp[$key]::static_method(); 
} 

以爲你在數組中指定了名稱「object」,我假設它們是類名。靜態函數不能用實例調用。

相關問題