回答:
マニュアルと同様=
に、パラメーターの定義では等号()を使用します。
function dosomething($var1, $var2, $var3 = 'somevalue'){
// Rest of function here...
}
引数のデフォルト値は定数式でなければなりません。変数または関数呼び出しにすることはできません。
ただし、この機能が必要な場合:
function foo($foo, $bar = false)
{
if(!$bar)
{
$bar = $foo;
}
}
$bar
もちろん、ブール値であるとは想定されていません。
$bar === false
これはつまり、$bar
がにデフォルト設定されているときに実行する必要があるアクションですfalse
。これ0
は、渡された場合の不正なアクションを回避するため、機能します-ブール値が必要な場合を除きます。Kzqaiが言ったように、より一般的な解決策はを使用する$bar = null
ことです。これは、$ barの値がブール値の場合にも使用できるためです。次に、テストはif (is_null($bar))
またはになり if ($bar === null)
ます。
日付関数は次のように定義されます。
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
ます。
処理する必要のある属性の数がわからない場合は...
、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');
ご覧のとおり、このトークンは基本的にすべてのパラメーターを配列に変換します。配列は任意の方法で処理できます。
function dosomething($var1, $var2, $optionalValue = null)
私はこのより良いオプションを見つけました。