Skip to main content

ทำความรู้จักกับ Spread Operator ใน PHP

· 2 min read

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 สำหรับการดำเนินการตัวอย่างดังนี้

ตัวอย่างที่ 1
$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]
note

ตัวดำเนินการ 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

ตัวอย่างที่ 2
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

ตัวอย่างที่ 3
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

ตัวอย่างที่ 4
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 ไว้ครับ 😊

References

Loading...