35

名前付きの関数パラメーターを持つことは可能ですphpか? python使用例は次のとおりです。

function foo($username = "", $password = "", $timeout = 10) {

}

オーバーライドしたい$timeout:

foo("", "", 3);

醜い。私はむしろやりたい:

foo(timeout=3);
4

5 に答える 5

34

PHP 8.0 では、RFCの承認により、名前付き引数のサポートが追加されました。

名前付き引数は、値の前にパラメーター名とそれに続くコロンを付けることによって渡されます。パラメータ名として予約キーワードを使用できます。パラメータ名は識別子である必要があり、動的に指定することはできません。

たとえば、例で3番目のオプションパラメータのみを渡すには:

foo(timeout: 3);

PHP 8 より前の名前付きパラメーターは、PHP では使用できませんでした。技術的には、呼び出すfoo($timeout=3) と最初に評価さ$timeout=3れ、その結果が3最初のパラメーターとして に渡されますfoo()。また、PHP はパラメーターの順序を強制するため、同等の呼び出しはfoo("", "", $timeout=3). 他に 2 つのオプションがあります。

  • 関数に配列をパラメータとして取り、配列キーをチェックさせます。個人的にはこれは醜いと思いますが、機能し、読みやすいです。利点はシンプルで、後で新しいパラメーターを簡単に追加できることです。欠点は、関数の自己文書化が少なく、IDE (オートコンプリート、関数パラメーターのクイック検索など) から多くの助けを得られないことです。
  • パラメータなしで関数を設定し、PHP に引数を要求するか、PHP 5.6+の可変長引数機能func_get_args()を使用します。パラメータの数に基づいて、それぞれの処理方法を決定できます。多くの JQuery 関数は、このようなことを行います。これは簡単ですが、自己文書化されていないため、関数を呼び出す人を混乱させる可能性があります。そして、あなたの議論はまだ名前が付けられていません。...
于 2013-10-01T22:22:21.490 に答える