15

PHP では、引数が次のようなデフォルト値を持っている限り、引数を渡さずに関数を呼び出すことができます。

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

ただし、最後の 1 つは異なるものにしたいが、最初の 2 つのパラメーターはデフォルト値を使用する必要があるとしましょう。私が考えることができる唯一の方法は、成功せずにこれを行うことです:

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 に答える
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;}
    ...
   }

永続的なパラメーターを指定せずに、または 1 つまたは複数を「false」に置き換えずに呼び出します。

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