Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@gomaaa

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

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

まとめ

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?