2013-10-03 59 views
3

這可能看起來像一個學術或無用的話題,但我很好奇。PHP:調用函數時指定參數變量名稱?

當用PHP開發網頁時,我經常需要調用帶有幾個參數的函數。我經常需要查找函數的規範(在php.net或我的包含文件中,如果它是我定義的函數),以提醒自己變量是什麼,它們的順序以及默認值是什麼等等。我想你們中的很多人都可以與此相關。

這樣定義一個函數:

function do_something_awesome ($people_array, $places_recordset, $num_cycles, $num_frogs, 
    $url = '?default=yes', $submit_name = 'default_submit_label') { 
    ... 
} 

調用的時候,可能是這樣的:

$result = do_something_awesome($names, $rsTowns, $c, $f); 

我的問題是這樣的:我想我寫的代碼中,提醒的方式我的那個參數對應於每個變量,在像這樣的函數調用期間。如下調用函數是否合法?

$result = do_something_awesome($people_array = $names, $places_recordset = $rsTowns, 
    $num_cycles = $c, $num_frogs = $f); 

如果不是在PHP中,是否有其他語言的方法調用可以這樣做?

+2

搜索「命名參數」或「[命名參數](http://en.wikipedia.org/wiki/Named_pa​​rameter)」。你可以在PHP中調用類似的函數,但是你會有明顯的副作用(在當前作用域中引入名爲'$ people_array'的變量並銷燬它們可能已有的值)。 – DCoder

回答

1

要回答你的第一個問題:

我的問題是這樣的:我想我寫的方式代碼在這樣的函數調用期間,我想起了每個變量對應哪個參數。

AFAIK,許多PHP編碼器通過傳遞關聯數組作爲唯一參數來完成它。但是,您必須在被調用函數內部檢查自己的變量。

$result = do_something_awesome(array(
    'people_array' => $names, 
    'places_recordset' => $rsTowns, 
    'num_cycles' => $c, 
    'num_frogs' => $f 
)); 

至於:

是它曾經法律調用函數如下?

,不會引起任何PHP錯誤,但你得到有效的做的是:

$result = do_something_awesome(expression, expression, expression, expression); 

參見:PHP Functions arguments

PHP不知道要放$people_array = ...$num_frogs = ...在其相應的當你決定切換他們的訂單時,你會發現它們。此外,正如DCoder所說,這些表達式實際上發生在當前範圍內,並且會在不讓您知道的情況下更改任何預先存在的變量。

+0

謝謝@abstr。我已經使用了一些關聯數組,而且看起來他們對於我定義的函數來說足夠好用了。 –

0

你可以試試這個:

$bas = 'This is passed to the function.'; 
$bar = 'This will be modified.'; 

function foo($bar) 
{ 
    echo $bar; 
} 

foo($bar = $bas); 
echo $bar; 

從這個腳本的輸出將是'This is passed to the function.This is passed to the function.'。所以就像DCoder所說,雖然你可以使用它們,但它是完全合法的,但如果你有其他變量與函數參數同名,這將覆蓋它們(在這種情況下,原來的$bar被覆蓋)。

1

有關使用一個對象作爲唯一的參數是什麼:

function my_function($arguments) { 
    if (!is_object($arguments)) throw new Exception(); 
    $default_values = array('arg1' => 'value1', 'arg2' => 'value2'); 
    foreach ($default_values as $key => $default_value) 
     if (!isset($arguments->$key)) $arguments->$key = $default_value; 
    ## do the job ## 
} 

## and then 
$my_arguments = new stdClass(); 
$my_arguments->arg2 = 'some_value'; 
my_function($my_arguments); 
相關問題