3

重複の可能性:
PHP でオプションのパラメーター値を指定する方法はありますか?
PHP 関数 - 一部のデフォルト パラメータを無視する

次のような関数があるとします。

function foo($name = "john", $surname = "smith") { ... }

そして、私はこのように呼んでいます:

$test = foo("abc", "def");

名前をスキップして姓のみを使用したいとしたら、どうすれば実現できるのでしょうか? $test = foo("def"); だけを行う場合 コンパイラは、名前ではなく姓を参照していることをどのように知ることができますか? NULL を渡すことで実行できることは理解していますが、次のような場合にはこれが必要です。

$test = foo($_POST['name'], $_POST['surname']);

前もって感謝します。

4

4 に答える 4

3

あなたはこれを試すことができます-

$num_args = func_num_args();
if($num_args == 1)
 $surname = func_get_arg(1);
else
 $surname = func_get_arg(2);
 $name = func_get_arg(1);

使用する前にテストしてください。

于 2013-01-02T13:28:31.007 に答える
2

あなたのコード

$test = foo($_POST['name'], $_POST['surname']);

また、最初の PARAMETER が空の場合は NULL を渡すため、コンパイラは 2 番目のパラメーターまでであることを認識します。commaパラメータリストにaがあると、ここに 2 つのパラメータがあることがすでに PHP に通知されます。

于 2013-01-02T13:26:19.993 に答える
0

これを行うには、空の文字列を関数に渡し、渡された引数が空の文字列であるかどうかを関数で検出し、そうである場合はデフォルト値で置き換えます。これにより、関数呼び出しは次のようになります。

foo('','lastname');

そして、これらの数行を関数の先頭に追加して、空の文字列がパラメーターとして渡されたかどうかを検出できます。

function foo($name = "john", $surname = "smith") { 
    if($name==='') { $name = 'john'}
    //more code 
    ... }
于 2013-01-02T13:27:07.487 に答える
0

私は通常、次のようなことをします:

function foo($parameters = array())
{
    print_r($parameters);
}

foo($_POST); //will output the array

3つ以上のパラメーターが必要な場合に使用します。

ただし、次を使用することもできます。

function foo()
{
    $args = func_get_args();  
    foreach ($args as $arg) {  
        echo "$arg \n";  
    }
}
于 2013-01-02T13:29:47.607 に答える