PHP - Spread Operator

PHP nhận ra ký hiệu ba chấm (...) là spread operator . Toán tử spread cũng đôi khi được gọi là splat operator . Toán tử này lần đầu tiên được giới thiệu trong phiên bản PHP 7.4. Nó có thể được sử dụng hiệu quả trong nhiều trường hợp như giải nén mảng.

Example 1

Trong ví dụ dưới đây, các phần tử trong $arr1 được chèn vào $arr2 sau một danh sách các phần tử của chính nó.

<?php
   $arr1 = [4,5];
   $arr2 = [1,2,3, ...$arr1];

   print_r($arr2);
?>

Nó sẽ tạo ra output

Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
)

Example 2

Toán tử Spread có thể được sử dụng nhiều hơn một lần trong một biểu thức. Ví dụ, trong đoạn mã sau, một mảng thứ ba được tạo ra bằng cách mở rộng các phần tử của hai mảng.

<?php
   $arr1 = [1,2,3];
   $arr2 = [4,5,6];
   $arr3 = [...$arr1, ...$arr2];

   print_r($arr3);
?>

Nó sẽ tạo ra output

Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
   [5] => 6
)

Example 3

Lưu ý rằng kết quả giống nhau có thể đạt được bằng cách sử dụng hàm array_merge() , như được hiển thị bên dưới −

<?php
   $arr1 = [1,2,3];
   $arr2 = [4,5,6];
   $arr3 = array_merge($arr1, $arr2);

   print_r($arr3);
?>

Nó sẽ tạo ra output giống nhau −

Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
   [5] => 6
)

Tuy nhiên, việc sử dụng toán tử (...) hiệu quả hơn nhiều vì nó tránh được chi phí của một cuộc gọi hàm.

Example 4

PHP 8.1.0 cũng đã giới thiệu một tính năng khác cho phép sử dụng các đối số có tên sau khi giải nén các đối số. Thay vì cung cấp giá trị cho từng đối số một cách riêng biệt, các giá trị từ một mảng sẽ được giải nén vào các đối số tương ứng, sử dụng ... (ba dấu chấm) trước mảng.

<?php  
   function  myfunction($x, $y, $z=30) {
      echo "x = $x  y = $y  z = $z";
   }

   myfunction(...[10, 20], z:30);
?>

Nó sẽ tạo ra output

x = 10  y = 20  z = 30

Example 5

Trong ví dụ sau, giá trị trả về của một hàm là một mảng. Các phần tử của mảng sau đó được trải ra và giải nén.

<?php
   function get_squares() {
      for ($i = 0; $i < 5; $i++) {
         $arr[] = $i**2;
      }
      return $arr;
   }
   $squares = [...get_squares()];
   print_r($squares);
?>

Nó sẽ tạo ra output

Array
(
   [0] => 0
   [1] => 1
   [2] => 4
   [3] => 9
   [4] => 16
)