2013-02-14 68 views
0

我需要這方面的幫助:函數中的變量變量?

$foo = array ('Projects', 'Clients'); 

,我需要從預裝的庫運行功能

$bar->getProjects()->data 
$bar->getClients()->data 

等等,等等

,但我有它的週期。所以我想要類似

foreach($foo as $value) 
    $return_value = $bar->get >>>>$value<<<< ()->data 

這怎麼辦?

+0

檢查這個http://www.php.net/manual/en/function.call-user-func.php – zarkoz 2013-02-14 13:25:02

+0

查找['call_user_func()'](http://php.net/manual/en/function.call-user-func.php)。 – SDC 2013-02-14 13:25:19

+0

好吧,我知道了..非常有用,但我設法只回應它作爲一個字符串與變量..如何真正運行該功能? – 2013-02-14 13:44:00

回答

0

沒有爲一個魔術方法:__call

function __call($method, $params) { 

    $var = substr($method, 3); 

    if (strncasecmp($method, "get", 3)) { 
     return $this->$var; 
    } 
    if (strncasecmp($method, "set", 3)) { 
     $this->$var = $params[0]; 
    } 
} 

您還可以看看call_user_func

1

我會用反射,一個有據可查的,沒有神奇的API:

<?php 

$foo = array ('Projects', 'Clients'); 
$bar = new MyAwesomeClass(); 

var_dump(invokeMultipleGetters($bar, $foo)); 


// could also make this a method on MyAwesomeClass... 
function invokeMultipleGetters($object, $propertyNames) 
{ 
    $results = array(); 
    $reflector = new ReflectionClass($object); 

    foreach($propertyNames as $propertyName) 
    { 
     $method = $reflector->getMethod('get'.$propertyName); 
     $result = $method->invoke($bar); 
     array_push($results, $result) 
    } 

    return $results; 
} 
+0

IMO這是最乾淨的解決方案。它還允許您獲取大量有關該方法所需參數的信息,如果您還需要開始傳遞參數。 – 2013-02-14 13:30:41

+1

@ColinMorelli最簡潔的解決方案是不依賴於動態方法調用,而是使用接口。 – KingCrunch 2013-02-14 14:33:29

+0

@KingCrunch當然 - 我相信你和我有更多的編程經驗。但是你不能教授編程概念,比如「編程接口」給那些新編程的人,因爲他們不太可能看到好處。鑑於這個問題可能的答案的範圍內 - 這可能是更好的解決方案之一。 – 2013-02-14 14:35:07