PHP 中的 ...$args,這個 ... 是什麼?

你可能在 PHP 中看過 ...$args 的程式碼,這個 ... 又稱為參數拆包 (arguments unpacking, AKA spread operator),是在 PHP 5.6 加入的功能。

... 可以將一個陣列中的參數拆開來並放到新的陣列中。

$foo = [1, 2, 3];
$bar = [0, ...$foo];

// [0, 1, 2, 3]
var_dump($bar);

呼叫函式時所用的引數也可以使用 ...

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

$operators = [2, 3];

// 6
echo add(1, ...$operators);

如果參數拆包時傳入的陣列,其 key 值有對應函式需要的參數名稱,那麼PHP 會自動根據 key 值代入對應的參數。

<?php

$callback = function ($foo, $bar) {
    echo $foo . $bar;
};

$array = [
    'foo' => 'hello ',
    'bar' => 'world!',
];

$callback(...$array);

... 如果放在方法的參數中則有不太一樣的使用方式,可以將傳進函式或是方法的多個參數,包成一個陣列來使用,在別的語言中稱為 splat operator。

<?php

function concatenate(...$strings) {
    $string = '';

    foreach($strings as $piece) {
        $string .= $piece;
    }

    return $string;
}

// I'd like 6 apples
echo concatenate("I'd ", 'like ', 4 + 2, ' apples');

參考資料


sharkHead
written by
sharkHead

後端工程師, PHP 基金會每月 5 鎂小額贊助人 稍微擅長 PHP、Python 與 Google Search,偶爾寫寫 TypeScript 對於逗號後面必須加空格有著絕對的堅持