2013-01-05 24 views
1

在Python中,可能有一個函數,其中幾個變量都具有默認值。然後傳遞其中一個值的值。所以,如果我有默認函數PHP與Python中的變量

function foo(a=10,b=50, c=70) 
    pass 
    pass 
    return 

然後我可以叫

foo(b=29) 

,它會調用

foo(10,29,70) 

(使用默認爲所有的值,併爲一個確切值變量)。

在PHP中有類似的可能嗎?

回答

1

不,在PHP中沒有等價物。您可以爲函數參數的默認值,但他們是從左邊到右邊評估,並沒有命名:

function test($var1 = 'default1', $var2 = 'default2') 
{ 

} 

在該示例中的兩個變量是可選的,但如果你想指定你必須指定的第一個參數第二。

test(); // works 
test('arg1'); // works 
test('arg1', 'arg2'); // works 
test('arg2'); // this will set the first argument, not the second. 

,如果你需要在你的可選參數的靈活性常見的解決方法是傳遞一個數組作爲參數:

function test($options) 
{ 

} 

這可以在一個單一關聯數組形式的可變參數:

$options = array('var1' => 'arg1', 'var2' => 'arg2'); 
test($options); 
+0

謝謝。我懷疑是這樣,但真的不確定。 –

1

使用數組作爲參數。例如:

function a(array $params) { 
    $defaults = array(
     'a' => 10, 
     'b' => 50, 
     'c' => 70, 
    ); 
    $params += $defaults; 
    // use $params 
} 

a(array('b' => 29)); 
+0

哇!在我正在編寫的代碼中,這將是一個過度殺傷力。但這是一個非常有趣的解決方案。 –

+1

如果你有很多參數(其中很多不是必需的),通常我會建議只傳遞一個結構的參數。由於數組是簡單的解決方案(如示例中),所以我會建議創建代表參數的類。例如,'function search(Filter $ filter)'和'Filter'類將自己保存參數。這提供了更大的可讀性(因爲您不必計算第8個參數等),但有時可能是過度的。 –