2016-12-22 9 views
0

私は機能オプションの関数引数をいくつか指定する方法はありますか?

public function test($arg1, $arg2 = "a", $arg3 = "b")

は、デフォルト値で$arg2を残すのみ$arg1$arg3を指定して、それを呼び出すための方法はありますか?

+0

いいえ、ありません。 '$ arg3'を渡すためには、' $ arg2'も渡す必要がありますが、 '$ arg2'のデフォルト値を渡すことはできますか? 'func_get_args()'を使うトリッキーなことや、名前付きの配列をパラメータとして使うことを除いて 'test( 'hello'、 'a'、 'world');' –

+1

?いいえ。オプション引数*は、最後の必須引数の後に*を持つ必要があります。 (おそらく、php7に何かがありますが、わかりません) –

+1

私は通常 'test( 'hello'、null、 'world!');そしてそれは他の言語にも使われます...おそらくテストをすることができます'$ arg2'がヌルであるかどうかを調べ、これに基づいて" default "値を適用します。 –

答えて

2
function test($arg1, $arg2 = "a", $arg3 = "b") { 
    if (is_null($arg2)) $arg2 = "a"; 
    return $arg1.' '.$arg2.' '.$arg3; 
} 

echo test(1, null, 3); 

出力使用に言及していると思う:

1 a 3 

はJavaScriptでこれはかなり一般的であることにも指摘する:

function test (input, callback) { 
    $.post("example.com/endpoint", input, function(err, data) { 
    if (error || response.statusCode !== 200) { 
     callback(true, response) 
    } 
    callback(null, data) 
    }) 
} 

test({ 
    'id': 1, 
    'name': 'Mary' 
}, function (err, data) { 
    if (err) { 
    console.log.error('Error!!') 
    console.log(data) 
    } 
    console.log.info(data) 
}) 
+0

これは、彼が関数にアクセスしてそれを変更でき(実際にはわからない)、 'null'が' $ arg2'に対して有効な値でない場合にのみ機能します。 –

+0

@MagnusErikssonそれは、ユースケースに依存しますが、うまくいくかもしれません。 –

+0

はい。しかし、それを指摘したかっただけです。 :) –

0

あなたはこのように機能をカリー化使用することができます。このpost

function foo($x, $y, $z) { 
    echo "$x - $y - $z"; 
} 

$bar = function($z) { 
    foo('A', 'B', $z); 
}; 

$bar('C'); 

も参照してください。

function foo($x, $y, $z) { 
    echo "$x - $y - $z"; 
} 

function fnFoo($x, $y) { 
    return function($z) use($x,$y) { 
    foo($x, $y, $z); 
    }; 
} 

$bar = fnFoo('A', 'B'); 
$bar('C'); 
関連する問題