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' に渡すように呼び出しを試みたいと考えています。

$veg に 0 を渡してコード内で分岐し、$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ではそれを行うことはできません。

null0、または、またはその他の値を渡す必要があります。値が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'

このコード例の欠点は、デフォルト値を 2 回コーディングする必要があることです。パラメータ宣言でデフォルト値を null に簡単に設定できるので、デフォルト値を 2 回コーディングする必要はありませんが、2 回設定するのが好きです。これは、私の IDE がデフォルト値を即座に表示するパラメータ ヒントを提供してくれるからです。関数シグネチャで。

于 2013-03-14T13:08:05.043 に答える