2011-05-01 60 views
1

我有一個函數變量是這樣的...如何在傳遞函數變量時避免php函數調用?

$aName = "My Name"; 

功能需要通過像這樣:

$sayHelloFunction = function sayHello($aName){ 
     echo($aName); 
} 

比,我有一個方法負責執行sayHelloFunction:

runningFunction($sayHelloFunction($aName)); 

在runningFunction中,它會有一些條件來執行該函數,但是當我將「$ sayHelloFunction($ aName)」傳遞給runningFunction時,它會執行exe可愛自動,但我想通過變量$ aName以及,我怎麼能實現它?謝謝。

+0

時使用匿名函數,這是一個謎? – Ibu 2011-05-01 08:27:18

+0

我想你混淆了PHP和JavaScript – Ibu 2011-05-01 08:29:22

+1

@Ibrahim - 這是一個完全有效的PHP題。 – 2011-05-01 08:31:28

回答

1

您將不得不單獨傳遞參數。但是,你可以將它們包裝在一個數組,這樣就可以將它們傳遞到runningFunction作爲一個參數,像這樣:

$printFunction = function($args) { 
    print $args['lastname'].', '.$args['firstname']; 
}; 

function runningFunction($f, $a) { 
    $f($a); 
} 

$firstname = 'Bob'; 
$lastname = 'Smith'; 

$functionArguments = array(
    'firstname' => $firstname, 
    'lastname' => $lastname 
); 

runningFunction($printFunction, $functionArguments); 

如果你希望你的動態功能得到「正確」的論點,然後我看到沒有辦法解決這樣的事情:

function runningFunction($f, $a) { 
    switch(count($a)) { 
     0: $f(); break; 
     1: $f($a[0]); break; 
     2: $f($a[0], $a[1]); break; 
     3: $f($a[0], $a[1], $a[2]); break; 
     // and so on 
    } 
} 

+2

'call_user_func_array()'基本上做了你在'switch'語句中所做的事情。 – kapa 2011-05-01 09:11:16

+0

@bazmegakapa的確,謝謝。我完全忽略了這一點。 – Lasar 2011-05-01 12:10:55

2
runningFunction($sayHelloFunction, $aName); 

簡單。

+0

但我的sayHelloFunction需要param,而且我不想在runningFunction裏面分配參數..... – Tattat 2011-05-01 08:33:56

0

as xconspirisist建議將$aName作爲函數的單獨參數。

關於Variable Functions的詳細信息可以在PHP網站上找到。

+0

我想使runningFunction抽象,不依賴於$ sayHelloFunction,我不介意pass runningFunction多一個參數,但我正在考慮,如果我還有一個參數需要,比如$ sayHelloFunctionAgain,它需要兩個參數,$ aName,$ aTime,那麼我需要爲runningFunction再寫一個參數,那不是wt I想要...... – Tattat 2011-05-01 08:38:09

1

傳遞的參數作爲一個數組,然後用call_user_func_array()打電話給你的函數。

這樣你的runningFunction()將是絕對抽象的(按照你的要求),它可以調用任何類型的函數,你有責任傳遞正確的參數數量。

function runningFunction ($callback, $parameters=array()) { 
    call_user_func_array($callback, $parameters); 
} 

runningFunction($sayHelloFunction, array($aName)); 

call_user_func_array()

0

調用runningFunction

function runningFunction($func) { 
    $func(); 
} 

runningFunction(function() { 
    $sayHelloFunction($aName)); 
    // You can do more function calls here... 
});