2013-03-28 61 views
1

我想有在我的PHP類的方法,用方法名索引的數組,這樣我可以做這樣的事情:類方法PHP數組

public function executeMethod($methodName){ 
$method=$this->methodArray[$methodName]; 
$this->$method(); 
// or some other way to call a method whose name is stored in variable $methodName 
} 

我發現這對__call :

與尚未聲明或不在當前 範圍可見性 或方法進行交互時,重載方法被調用

但是,我想在executeMethod中使用的方法是可見的。

什麼是正確的方法來做到這一點?可能嗎?

編輯:我想在executeMethod中獲取方法名稱,然後調用給定名稱的方法,並有方法數組的想法。

+0

那麼什麼是你的問題? – Tchoupi

+0

什麼是不工作? – jcbwlkr

+0

你可以顯示'$ this-> methodArray'內容是什麼樣子嗎?價值與鑰匙有何不同? –

回答

1

您可以通過使用字符串語法

$method = 'your_method_name_as_string'; 
$this->$method(); 

php doc

<?php 
class Foo 
{ 
    function Variable() 
    { 
     $name = 'Bar'; 
     $this->$name(); // This calls the Bar() method 
    } 

    function Bar() 
    { 
     echo "This is Bar"; 
    } 
} 

$foo = new Foo(); 
$funcname = "Variable"; 
$foo->$funcname(); // This calls $foo->Variable() 

?> 
+0

謝謝。我不知道我可以用字符串變量調用方法。現在我不需要一組方法。你幫了我很多! :) – Milos

0

調用對象的方法和屬性也許您正在尋找這樣的事情:

public function executeMethod($methodName) { 
    if (isset($this->methodArray[$methodName])) { 
     $method = $this->methodArray[$methodName]; 
     return call_user_func(array($this, $method)); 
    } 
    throw new Exception("There is no such method!"); 
} 
0

anonymous functions是可在PHP 5.3中使用

我想你想這樣做

$tmp['doo'] = function() { echo "DOO"; }; 
$tmp['foo'] = function() { echo "FOO"; }; 
$tmp['goo'] = function() { echo "GOO"; }; 

$tmp['doo']();