【PHP】…演算子、スプレッド演算子、アンパック

php

array_merge

まだ使えることは使える(PHP 8以降)。

<?php
$colors = ["color" => "red", 2, 4];
$shapes = ["a", "b", "color" => "green", "shape" => "trapezoid", 4];
$array = array_merge($colors, $shapes);
var_dump($array);
?>

…演算子

同じ結果になる。

<?php
$colors = ["color" => "red", 2, 4];
$shapes = ["a", "b", "color" => "green", "shape" => "trapezoid", 4];
$array = [...$colors, ...$shapes];
var_dump($array);
?>

We no longer need array_merge() as of PHP 7.4. […$a, …$b]does the same as array_merge($a, $b)and can be faster too.(7.4以降不要になり、「…」はより高速になっている)
高速な理由は、array_merge がfunctionである一方で、spread operator(…)がlanguage structure(言語構造)であるため。(cf. キーワードのリスト
またオブジェクトも扱える(supports objects implementing Traversable)。
「…」なら、$array = […$colors, …$shapes, 'size’];などとしても良い。

Spread operator should have a better performance than array_merge. It’s because not only that spread operator is a language structure while array_merge is a function call, but also compile time optimization can be performant for constant arrays.

array_merge only supports array, while spread operator also supports objects implementing Traversable.

Advantages over array_mergeより

PHP 5.5.x から PHP 5.6.x への移行で、…による引数のアンパック

配列やTraversable オブジェクトを引数リストにアンパックするために「…演算子」を使うように(他言語ではsplat 演算子)。スプレッド演算子、…演算子、アンパックするといった表現がある。

<?php
function calculate($a, $b, $c) {
    return $a + $b - $c;
}
$datas = [5,2];
echo calculate(3, ...$datas);
?>

参照

Traversableインターフェイス
…による引数のアンパック

php, programming

Posted by 異世界攻略班