2011-05-15 83 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); 
} 

这样的话,你就不必通过空的第一个参数,当你不需要。