可変長引数
可変長引数の使い方 ▲
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
目次