LoginSignup
5
4

More than 5 years have passed since last update.

...の意味(PHP5.6以降の話)

Last updated at Posted at 2017-06-24

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を調べてみるとかなり多く、
フレームワークのような引数を柔軟に処理をすることが求められる場合に
使われることが多いのかな?という印象だった

まとめ

... は、関数の引数定義、引数渡しで使われる
なにか便利そうなもの

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4