ทำความรู้จักกับ Spread Operator ใน PHP
Table of contents
Intro
สวัสดีครับ บทความนี้จะเขียนอธิบายการใช้งาน Spread Operator ใน PHP ที่มีความคล้ายคลึงกับ Spread Operator ของ JS อยู่เหมือนกัน โดยส่วนต ัวชอบ Spread Operator ของ JS มาก และช่วงหลังมารู้ว่า PHP ก็มีเหมือนกันก็ทำให้สะดวกขึ้นมาเยอะ และเห็นว่ามีประโยชน์จึงขอบันทึกไว้หน่อย 🚀
TL; DR;
Spread operator ของ PHP คือการสร้างและ Merge Array อันเดียวหรือมากกว่า 2 ให้เป็น Array เดียว
Spread operator
ใน PHP 7.4 ได้มี Spread operator ซึ่งเป็น Array expression โดยจะใช้จุด 3 จุด (...) วางไว้ด้านหน้าตัวแปร Array สำหรับการดำเนินการตัวอย่างดังนี้
$numbers = [4,5];
// ใช้ ... สำหรับ Spread operator
$scores = [1,2,3, ...$numbers];
print_r($scores);
$scores Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = [...$arr1, ...$arr2, 111]; //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
ตัวดำเนินการ Spread operator มีประสิทธิภาพที่ดีกว่าฟังก์ชัน array_merge() เนื่องจากเป็นการสร้าง Array ในระดับโครงสร้างภาษาในขณะที่ array_merge() เป็นการเรียกใช้ฟังก์ชัน นอกจากนี้ PHP ยังเพิ่มประสิทธิภาพให้กรณีเป็น Constant arrays ในตอน Compile
จะว่าไปก็มีความแอบคล้ายวิธี Argument unpacking อยู่เหมือนกัน แต่ Argument unpacking จะใช้กับ Method หรือ Function ส่วน Spread operator จะใช้กับ Array ด้วยกัน
1. ใช้ Spread operator เพื่อ Return value เมื่อ Function call
function getArr() {
return ['a', 'b'];
}
//['a', 'b', 'c']
$arr6 = [...getArr(), 'c'];
// หรือ
function getRandomNumbers()
{
for ($i = 0; $i < 5; $i++) {
$randomNumbers[] = rand(1, 100);
}
return $randomNumbers;
}
// [47, 34, 53, 15, 83]
$random_numbers = [...getRandomNumbers()];
2. ใช้ Spread operator เพื่อเป็นตัว Generator
function getEvenNumber()
{
for($i =2; $i < 10; $i+=2){
yield $i;
}
}
// [2, 4, 6, 8]
$even = [...getEvenNumber()];
3. ใช้ Spread operator เพื่อเป็น named arguments
ใน PHP 8.0 สามารถใช้ Spread operator เพื่อเป็น Named arguments ได้ดังนี้
มีอีกชื่อเรียกคือ Argument unpacking
function getFullName(string $first, string $middle, string $last): string
{
return $middle ?
"$first $middle $last" :
"$first $last";
}
// ชื่อ Keys ของ Array นั้นต ้องกำหนดให้ตรงกันกับชื่อของ Arguments ใน Function (ลำดับไม่จำเป็นต้องตรงกันก็ได้)
$names = [
'middle' => 'W.',
'first' => 'George',
'last' => 'Bush'
];
echo getFullName(...$names); // George W. Bush
สรุป
ถือว่ามีประโยชน์ละสามารถประยุกต์ใช้กับงานได้หลากหลาย ดังนั้นการเรียนรู้เทคนิคการเขียนก็มีส่วนในการช่วยพัฒนารูปแบบการเขียนเดิม ๆ ให้ดียิ่งขึ้น แนะนำให้อ่าน Tips ที่เป็น Tags ของ PHP อื่น ๆ เพิ่มเติมได้ โดยผมได้พยายามรวบรวมเทคนิคที่ไม่ค่อยเจอเท่าไหร่ใน PHP ไว้ครับ 😊