2011-05-15 79 views
1

我有一個功能,如下所示:PHP - 繼承功能默認值

function test($arg1 = 'my_value', $arg2 = 'second') 
{ 
} 

當我把它叫做我只想第二值設置爲不同的東西,像這樣:

test(inherit, 'changed value'); 

我發現有可能將此行添加到我的功能(當我的「繼承」更改爲空):

$arg1 = (is_null($arg1) ? 'my_value' : $arg1); 

有沒有更好的方法,更好的方法來解決它?

+1

你必須回答你的問題 – 2011-05-15 08:50:38

回答

2

根據您的參數的性質和數量也可能是合理使用命名參數(至少仿真):

function xyz($args) { 
    $args += array(
     'x' => 'default', 
     'q' => 'default 2', 
     // ... 
    ); 

    // ... 
} 

xyz(array('q' => 'hehe, not default')); 
+0

似乎這是最好的建議。不完美,但似乎目前沒有更好的方法。謝謝! – 2011-05-15 12:18:41

+1

一個想法是在'xyz'裏面使用'extract($ args)'。這樣,您可以使用'$ q'而不是'$ args ['q']''。 – alexn 2011-05-15 15:20:40

0

你將不得不翻轉他們,你不能離開的第一個值是空白,

設置的第一個值,讓第二個是默認值;

UPDATE:

如果你想擁有動態長度,以你的論點考慮使用func_get_args();

function something() { 
    $args = func_get_args(); 
    .... 
} 

,那麼你可以測試你的不同的值或數據類型參數來讓他們做,請

+0

不夠好。在我的實際功能中,有比這更多的價值。我不能只是改變他們試圖忽略這個問題。在其他情況下,我想做相反的事情。 – 2011-05-15 08:47:46

+0

看到我的編輯,這應該對你更好 – Ibu 2011-05-15 08:48:52

+0

該解決方案不會在可讀性上得分。 :) – GolezTrol 2011-05-15 08:51:32

1

你已經解決了它的方式實際上是相當有用的任何宥。

另一種方式是每次在函數調用時傳遞與默認值相同的值。

如果這是結構性的,那麼你必須重新考慮函數。

1

使兩種不同的功能:

// Full function 
function testex($arg1 = 'my_value', $arg2 = 'second') 
{ 
} 

// Shorthand when just argument 2 is needed 
function test2($arg2 = 'second') 
{ 
    return testex('my_value', $arg2); 
} 

這樣的話,你就不必通過空的第一個參數,當你不需要。