6

我对php相当陌生,我想知道如何在第一个可选参数之后设置可选参数?

例如我有以下代码:

function testParam($fruit, $veg='pota',$test='default test'){
echo '<br>$fruit = '.$fruit;
echo '<br>$veg = '.$veg;
echo '<br>Test = '.$test;
}

如果我拨打以下电话:

echo 'with all parama';
testParam('apple','carrot','some string');
//we get:
//with all parama
//$fruit = apple
//$veg = carrot
//Test = some string

echo '<hr> missing veg';
testParam('apple','','something');
//we get:
//missing veg
//$fruit = apple
//$veg = 
//Test = something

echo '<hr> This wont work';
testParam('apple',,'i am set');

我想尝试拨打电话,以便在最后一个示例中将“pota”显示为默认的 $veg 参数,但传递给 $test 'i am set'。

我想我可以将 0 传递给 $veg 然后在代码中分支它来表示如果 $veg =0 然后使用 'pota' 但只是想知道是否还有其他语法,因为我在 php.net 中找不到任何关于它的内容。

4

3 回答 3

7

仅使用默认参数无法执行您想要的操作。默认值仅适用于缺少的参数,并且只能缺少最后一个参数。

您可以添加如下行

  $vega = $vega ? $vega : 'carrot';

并将函数称为

testParam('apple',false,'something');

或者使用更通用的技术,将参数名称作为键传递到数组中。就像是

function testparam($parms=false) {
    $default_parms = array('fruit'=>'orange', 'vega'=>'peas', 'starch'=>'bread');
    $parms = array_merge($default_parms, (array) $parms);
    echo '<br>fruit  = $parms[fruit]';
    echo '<br>vega   = $parms[vega]';
    echo '<br>starch = $parms[starch]';
}

testparm('starch'=>'pancakes');
//we get:
//fruit = orange
//vega  = peas
//starch = pancakes

这有点冗长,但也更灵活。您可以在不更改现有调用者的情况下添加参数和默认值。

于 2009-07-27T13:17:41.450 回答
2

不幸的是,你不能在 PHP 中做到这一点。

您必须传入 0 或null或其他值,然后如果值为 0 或null,则将其更改为默认值。

是另一个应该为您提供更多信息的问题。

于 2009-07-27T12:49:36.287 回答
0

这是我使用的技术:

function testParam($fruit, $veg='pota', $test='default test') {

    /* Check for nulls */
    if (is_null($veg))  { $veg = 'pota'; }
    if (is_null($test)) { $test = 'default test'; }

    /* The rest of your code goes here */
}

现在要使用任何可选参数的默认值,只需像这样传递 NULL。

testParam('apple', null, 'some string');

在本例中,$veg将等于'pota'

此代码示例的缺点是您必须对默认值进行两次编码。您可以在参数声明中轻松地将默认值设置为 null,这样您就不必对默认值进行两次编码,但是,我喜欢设置两次,因为我的 IDE 为我提供了参数提示,可以立即向我显示默认值在函数签名中。

于 2013-03-14T13:08:05.043 回答