2008-08-29 8 views
127

PHPマニュアルでは、オプションのパラメータを持つ関数の構文を表示するために、依存するオプションのパラメータの各セットを角かっこで囲みます。例えば、date()機能のために、マニュアルが読み:$timestampはオプションのパラメータであり、かつPHPでオプションの引数をどのように作成しますか?

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

time()関数の戻り値に空白のデフォルトを去ったとき。

PHPでカスタム関数を定義するときに、このようなオプションのパラメータを作成するにはどうすればよいですか?多くのマニュアルのような

答えて

180

は、パラメータのあなたの定義で等号(=)記号を使用します。

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

は、オプションの引数にデフォルト値を与えます。私も重宝

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

いくつかの注意:

  • が右側にデフォルト値を保管してください。

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

35

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

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

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

$barはもちろんのブール値であることが予想されていないと仮定。

+1

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

+24

Nullははるかに良いデフォルトです。 – Kzqai

+1

は$ barではありません!== falseも動作しますか? – DooMMasteR

4

日付関数は次のようなものに定義されます。通常、あなたはこのようにデフォルト値を置く

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()であり、ヌルチェックと組み合わせました。リテラルには配列(array()または[])、ブール値、数字、文字列、およびnullが含まれます。

5

処理する必要がある属性の数がわからない場合は、PHP 5.6(see full documentation here)で導入された可変引数リストトークン(...)を使用できます。

構文:たとえば

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'); 

あなたが見ることができるように、このトークンは、基本的に、あなたが好きなように処理することができ、アレイにすべてのパラメータをオンにします。

関連する問題