PHPでオプションの引数をどのように作成しますか?


189

PHPマニュアルでは、オプションのパラメーターを持つ関数の構文を示すために、依存するオプションのパラメーターの各セットを角括弧で囲んでいます。たとえば、date()関数の場合、マニュアルには次のように記載されています。

string date ( string $format [, int $timestamp = time() ] )

どこに$timestampオプションのパラメータで、ブランクがデフォルトを去ったとき、time()関数の戻り値。

PHPでカスタム関数を定義するときに、このようなオプションのパラメーターをどのように作成しますか?

回答:


253

マニュアルと同様=に、パラメーターの定義では等号()を使用します。

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

function dosomething($var1, $var2, $optionalValue = null)私はこのより良いオプションを見つけました。
Mohammad Zaid Pathan

52

引数のデフォルト値は定数式でなければなりません。変数または関数呼び出しにすることはできません。

ただし、この機能が必要な場合:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

$barもちろん、ブール値であるとは想定されていません。


1
ただし、これは0または "false"が$ barに渡されたかどうかを評価します。
Tyzoid 2013年

33
Nullは、はるかに優れたデフォルトです。
Kzqai 2013

3
@DooMMasteR、つまり、$bar === falseこれはつまり、$barがにデフォルト設定されているときに実行する必要があるアクションですfalse。これ0は、渡された場合の不正なアクションを回避するため、機能します-ブール値が必要な場合を除きます。Kzqaiが言ったように、より一般的な解決策はを使用する$bar = nullことです。これは、$ barの値がブール値の場合にも使用できるためです。次に、テストはif (is_null($bar))またはになり if ($bar === null)ます。
ToolmakerSteve

22

私も便利だと思ったいくつかのメモ:

  • 右側はデフォルト値のままにします。

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • 引数のデフォルト値は定数式でなければなりません。変数または関数呼び出しにすることはできません。


14

オプションの引数にデフォルト値を指定します。

function date ($format, $timestamp='') {
}

10

日付関数は次のように定義されます。

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

通常、次のようにデフォルト値を設定します。

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

ただし、有効なデフォルト引数はリテラルのみです。そのためnull、最初の例ではデフォルト引数として使用し、ではなく $timestamp = time()、nullチェックと組み合わせました。リテラルには、配列(array()または[])、ブール値、数値、文字列、およびが含まれnullます。


8

処理する必要のある属性の数がわからない場合は...、PHP 5.6で導入された可変引数リストtoken()を使用できます(詳細はこちらのドキュメントを参照してください)。

構文:

function <functionName> ([<type> ]...<$paramName>) {}

例えば:

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

ご覧のとおり、このトークンは基本的にすべてのパラメーターを配列に変換します。配列は任意の方法で処理できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.