Laravelのhelperを見ていたら
<?php
/**
* Dump the passed variables and end the script.
*
* @param mixed
* @return void
*/
function dd(...$args)
{
foreach ($args as $x) {
(new Dumper)->dump($x);
}
die(1);
}
なんか引数が見慣れない形をしている
...って何?
変数に余韻を残したいのか?と思う「...」ですが
ちゃんと意味はありました
公式ドキュメント
PHP 5.6 以降では、引数リストに ... トークンを含めることで、 その関数が可変長の引数を受け取ることを示せます。 引数は、指定した変数に配列として渡されます。
つまり、 無限引数の関数が作れる
PHP5.6より前でも可変長の引数はあった
参考: http://php-beginner.com/reference/userfunction/arg_len.html
<?php
function my_func5(){
$arg_num = func_num_args(); //引数の数取得
$key = 0; //アクセスする引数番号
$arg_list = func_get_args(); //引数リストを配列に格納
if($arg_num >= $key+1){ //引数番号以上のリスト数があれば出力
echo func_get_arg($key)."行:";
};
for($i=0;$i<$arg_num;$i++){ //引数の数分ループ
echo $arg_list[$i];
};
};
my_func5("あ","い","う","え","お");
?>
前からできたことのようで
PHP5.6以降で ...
と記述することでスリムに書けるようになったよーということ
使い所
関数の引数として使う
<?php
// 渡された引数を全部足す関数
function sumOfInts(int ...$ints)
{
return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));
一見扱うには怖そうな可変長の引数も
上のような型宣言も付けることにより、安全に扱うことができる
関数に渡す値として使う
<?php
function hoge( $key, $value1, $value2 = null, $value3 = '') {
}
$array = [1, 2, 'fuga'];
hoge($key, ...$array);
上の例のように、値渡しに ...
を使う時は
変数が配列だったら個々の引数として展開されて関数に渡される
この使われ方はLaravelのcoreを調べてみるとかなり多く、
フレームワークのような引数を柔軟に処理をすることが求められる場合に
使われることが多いのかな?という印象だった
まとめ
...
は、関数の引数定義、引数渡しで使われる
なにか便利そうなもの