本記事では、PHP7.4より使用可能な構文である、
スプレッド構文の使い方について解説していく。
Contents
(PHP) スプレッド構文とは
PHP7.4からは、スプレッド構文と呼ばれる、
配列を従来より柔軟に扱うことが可能な構文が使用可能になった。
$values = [3, 4, 5];
$array = [ 1, 2, ...$values ];
=>$array = [1, 2, 3, 4, 5]
(PHP) スプレッド構文の書式
phpのスプレッド構文の書式を最初に確認しておく。
phpのスプレッド構文の書式は以下の様になっている。
//phpのスプレッド構文の書式
...$変数名
「.」ピリオド3つの後に変数名を記載する。
(PHP) スプレッド構文の使い方
ここからは実際に、PHPのスプレッド構文の使い方をサンプルを交えて解説していく。
PHPのスプレッド構文の使い方は以下の2パターンについて解説していく。
①配列形式でのスプレッド構文
②引数に使うスプレッド構文
①配列形式でのスプレッド構文
一つめは、配列形式でのスプレッド構文の使い方だ。
配列形式のスプレッド構文は、冒頭でも紹介した通り、PHP7.4から使用可能になった使い方だ。
<?php
$array1 = ['lion', 'monkey', 'gollira'];
$array2 = ['elephant', 'tiger'];
$result = [...$array1, ...$array2];
// 出力結果
Array
(
[0] => lion
[1] => monkey
[2] => gollira
[3] => elephant
[4] => tiger
)
上記の様に、
スプレッド構文の変数を配列形式の中に埋め込むことで、変数内の値をマージすることが可能だ。
上記はphp7.3以前では、array_merge関数を使用しないと実現できなかった。
//php7.3以前はarray_merge関数を使用
$array1 = ['lion', 'monkey', 'gollira'];
$array2 = ['elephant', 'tiger'];
$result = array_merge($array1, $array2);
しかしarray_merge関数を使用する場合、引数に使用する値は全て配列である必要があるため、配列でない値をマージするには若干の使い勝手の悪さがあった。
$array1 = ['lion', 'monkey', 'gollira'];
$result = array_merge('elephant', $array); //エラー、第一引数が配列ではない。
しかし、スプレッド構文を使用すれば、配列形式内の値は、配列でない値も含めてマージ可能なため、より配列の扱いが柔軟になったと言える。
$array1 = ['lion', 'monkey', 'gollira'];
$result = ['elephant', ...$array1];
// 出力結果
Array
(
[0] => elephant
[1] => lion
[2] => monkey
[3] => gollira
)
②引数に使うスプレッド構文
二つめは、引数に使うスプレッド構文の使い方を紹介していく。
こちらはphp7.3以前から使用可能だった使い方だ。
test('lion', 'monkey', 'gollira');
function test(...$params) { // 関数の引数を「...」と記述する
foreach($params as $value) {
echo $value ." : ";
}
}
// 実行結果
lion : monkey : gollira
上記の様に、関数「test」の引数にはスプレッド構文が使用されており、引数をいくつでも受け付けられる状態になっている。
関数内では受け付けた引数を順番にechoできているのが分かるだろう。
PHPのスプレッド構文の使い方まとめ
- php7.4より、配列形式内でスプレッド構文を使用可能となった。
- array_merge関数と比較して、配列以外の値も一緒にマージ可能なためより柔軟に配列操作が可能になった。
- 関数の引数へのスプレッド構文の使用は引き続き使用可能
関連記事
https://www.php.net/manual/ja/migration56.new-features.php#migration56.new-features.variadics
https://www.php.net/manual/ja/migration74.php
今回、php7.4から使用可能になったのは「配列式内での使用」のことだ。
と言うのもphp7.3以前から、関数の引数において「…$変数名」と言うスプレッド構文の書式は使用可能であったからだ。
今回配列形式の中にも使用可能になったと言うことで、本記事では改めて①配列形式でのスプレッド構文と、②引数に使うスプレッド構文の使い方についてまとめてみた。