如果我有以下功能:功能的可變長度參數列表
function foo($a = 'a', $b = 'b', $c = 'c', $d = 'd')
{
// Do something
}
我可以調用這個函數,只有通過爲$ d值,因此使所有與他們默認的其他參數?隨着代碼是這樣的:
foo('bar');
或者我有這樣的事情稱之爲:
foo(null, null, null, 'bar');
如果我有以下功能:功能的可變長度參數列表
function foo($a = 'a', $b = 'b', $c = 'c', $d = 'd')
{
// Do something
}
我可以調用這個函數,只有通過爲$ d值,因此使所有與他們默認的其他參數?隨着代碼是這樣的:
foo('bar');
或者我有這樣的事情稱之爲:
foo(null, null, null, 'bar');
不,你不能。使用數組:
function foo($args) {
extract($args);
echo $bar + $baz;
}
foo(array("bar" => 123, "baz" => 456));
在php.net上編寫一個bug報告,並要求他們爲該語言添加命名參數!
你必須使用空像你說:
foo(null, null, null, 'bar');
如果您不介意創建更多的功能,你可以做這樣的事情,我會想象整體代碼會更整潔。
function update_d($val){
foo(null, null, null, $val);
}
或者你可以使用數組,像這樣:
$args = array($a = 'a', $b = 'b', $c = 'c', $d = 'd');
foo($args);
你必須要做得像
foo(null, null, null, 'bar');
另一種方法是離開的論點出函數簽名,並使用func_get_args()
檢索值;
function foo() {
$args = func_get_args();
但隨後的是,如果你離開了前三null
值,也沒有辦法知道「酒吧」是$d
參數。請注意,這種方法在大多數情況下都是不可取的,因爲它混淆了你的函數簽名並且損害了性能。
簡答:第 長答案:Nooooooooooooooooooooooooooooo。
當完全沒有設置變量時將使用默認參數值。
func_get_args() - 獲取函數參數列表的數組。
func_num_args() - 返回傳遞給函數
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs<br />\n";
}
foo(a); foo(1,b,c); will work fine
爲什麼投下來?? – diEcho
你不能做沒有overloading技術參數的個數。
在這種情況下,您的程序假定如果只有一個參數通過,則是第四個參數。
可能的重複http://stackoverflow.com/questions/5968965/php-default-arguments – Yousf
@Quasdunk,你的意思是說它像'foo('','','','bar')' ? – freshest
你必須通過所有以前的參數,因爲PHP不支持Python那樣的命名參數。但看看[this](http:// stackoverflow。com/questions/7559305/php-passing-array-to-function/7559391#7559391)可以幫到你 –