15

在 PHP 中,只要参数具有如下默认值,您就可以调用不带参数的函数:

function test($t1 ='test1',$t2 ='test2',$t3 ='test3')
{
    echo "$t1, $t2, $t3";
}
test();

但是,假设我希望最后一个不同,但前两个参数应该使用它们的默认值。我能想到的唯一方法是这样做没有成功:

test('test1','test2','hi i am different');

我试过这个:

test(,,'hi i am different');
test(default,default,'hi i am different');

有没有干净、有效的方法来做到这一点?

4

5 回答 5

25

使用数组:

function test($options = array()) {
    $defaults = array(
        't1' => 'test1',
        't2' => 'test2',
        't3' => 'test3',
    );
    $options = array_merge($defauts, $options);
    extract($options);
    echo "$t1, $t2, $t3";
}

以这种方式调用您的函数:

test(array('t3' => 'hi, i am different'));
于 2009-10-25T12:21:29.570 回答
10

使用原始 PHP 无法做到这一点。您可以尝试以下方法:

function test($var1 = null, $var2 = null){
    if($var1 == null) $var1 = 'default1';
    if($var2 == null) $var2 = 'default2';
}

然后调用你的函数,null作为默认变量的标识符。您还可以使用具有默认值的数组,使用更大的参数列表会更容易。

更好的是尽量避免这一切,并重新考虑你的设计。

于 2009-10-25T12:24:01.243 回答
2

具有默认值的参数必须在 PHP 中的最后一个,在其他参数之后,并且在调用函数时必须填写所有其他参数。反正我不知道要传递一个触发默认值的值。

于 2009-10-25T12:18:57.670 回答
1

在这些情况下,我通常所做的是将参数指定为数组。看看下面的例子(未经测试):

<?php
test(array('t3' => 'something'));

function test($options = array())
{
  $default_options = array('t1' => 'test1', 't2' => 'test2', 't3' => 'test3');
  $options = array_merge($default_options, $options);

  echo $options['t1'] . ', ' . $options['t2'] . ', ' . $options['t3'];
}
?>
于 2009-10-25T12:22:44.230 回答
0

您可以定义如下函数:

function grafico($valores,$img_width=false,$img_height=false,$titulo="title"){
    if ($img_width===false){$img_width=450;}
    if ($img_height===false){$img_height=300;}
    ...
   }

并在没有持久参数的情况下调用它或用“false”替换一个或多个:

grafico($values);
grafico($values,300);
grafico($values,false,400);
grafico($values,false,400,"titleeee");
于 2015-02-05T09:47:43.970 回答