1. ホーム 
  2. 備忘録 
  3. PHP

可変長引数

可変長引数の使い方

PHP は ... を使った可変長引数をユーザー定義関数でサポートしている

引数リストに ... トークンを含めることで、 その関数が可変長の引数を受け取ることを示すことができる

関数内部では指定した変数に配列として渡される

public function sum( ...$numbers ) 
{
  $acc = 0;
  foreach ( $numbers as $n ) {
    $acc += $n;
  }
  return $acc;
}

echo sum( 1, 2, 3, 4 ); // 10 


また、関数を呼び出す際に ... を使うことで、配列や Traversable を実装した変数やリテラルを引数に展開することができる

public function add( $a, $b )
{
  return $a + $b;
}

echo add(...[1, 2])."\n"; // 3

$array = [3, 4];
echo add(...$array); // 7 


参照渡しをする場合は ... の前に&をつける必要がある

/**
 * 合計した上で中身をカウントアップ
 *
 * @param integer ...$numbers
 * @return integer 合計値
 */
function sumAndCountUp( &...$numbers )
{
  $acc = 0;
  foreach ( $numbers as $key => $value ) {
    $acc += $value;
    $numbers[$key] += 1;
  }
  return $acc;
}

/**
 * 合計するだけ
 *
 * @param integer ...$numbers
 * @return integer 合計値
 */
function sum( ...$numbers ) 
{
  $acc = 0;
  foreach ( $numbers as $key => $value ) {
    $acc += $value;
    $numbers[$key] += 1; // 加算しているが、値渡しで受け取っているので関数外に変化なし
  }
  return $acc;
}

list( $a, $b, $c, $d ) = [ 1, 2, 3, 4 ];

echo sum( $a, $b, $c, $d ); // 10 
echo $a . $b . $c . $d; // 1234

echo sumAndCountUp( $a, $b, $c, $d ); // 10 
echo $a . $b . $c . $d; // 2345

    参考文献

  1. 公式ドキュメント