Splat Operator trong PHP

Splat operator là một toán tử xuất hiện trong phiên bản PHP 5.6 trở lên. Bạn có thể sử dụng toán tử splat (...) để tạo các hàm đa dạng và đơn giản hơn như là các hàm nhận một số lượng đối số không xác định.

Đầu tiên hãy đi vào tìm hiểu  Variadic functions

Ta có đoạn code:

function test(...$parameters) {
	$string = '';
    foreach($parameters as $parameter) {
    	$string .= $parameter;
    }
    return $string;
}   

echo test("Hello", " Hi", " Goodbye");

Ouput của đoạn code trên:

Kết quả của đoạn code trên

Như vậy nếu ta có một hàm nhận một tham số đầu vào có dạng ...$parameters thì khi ta gọi hàm đó và truyền hơn 1 đối số  thì tất cả đối số đó sẽ được truyền vào 1 mảng là $parameters có dạng

array(3) {
  [0]=>
  string(5) "Hello"
  [1]=>
  string(3) " Hi"
  [2]=>
  string(8) " Goodbye"
}

Trước version 5.6 của PHP thì function func_get_args() có thể sử dụng để xử lý việc này.

function test() {
	$parameters = func_get_args();
	$string='';
    foreach($parameters as $parameter) {
    	$string.=$parameter;
    }
    return $string;
}   
	echo test("Hello", " Hi", " Goodbye");

Output cũng cho kết quả tương tự với việc sử dụng Variadic functions.

Tiếp theo ta sẽ tìm hiểu về Argument unpacking

Array và Traversable objects có thể được giải nén thành danh sách đối số khi gọi các hàm bằng cách sử dụng toán tử ....

function add($a, $b, $c) {    
	return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);

Giá trị khi thực hiện hàm trên là: 6

Như vậy việc sử dụng add(1, ...$operators); tương đương với việc sử dụng add(1, 2, 3); Việc này khá là tiện lợi khi hàm của chúng ta có nhiều tham số

Vậy nếu mảng chúng ta có nhiều hơn số tham số quy định thì sao ?

function add($a, $b, $c) {    
	return $a + $b + $c;
}
$operators = [2, 3, 4, 5];
echo add(1, ...$operators);

Giá trị khi thực hiện hàm trên là: 6


Kết quả khi thực hiện là giống nhau, điều này xảy ra tương đương với khi truyền quá nhiều đối số vào.

Tổng kết

Variadic functions Argument unpacking là một phương pháp khá hay để xử lý các đối số và tham số. Làm cho cách xử lý dữ liệu đầu vào trở nên dễ dàng hơn cũng như đa dạng về cách xử lý hơn.