你可能在 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');