Penggunaan fungsi FN.GG/ pada PHP

Assalamualaikum.

Sebentar lagi pada bulan November tepatnya tanggal 28 PHP akan segera merilis update-an minor selanjutnya yaitu versi 7.4 . Ada beberapa tambahan fitur yang menarik dan peningkatan yang tentunya akan membuat PHP lebih cepat, lebih readible, dan dapat diandalkan.

Di artikel ini saya akan sedikit menjelaskan salah satu fitur barunya yaitu Spread Operator & Arrow Function.

Spread Operator

Spread operator diketahui juga dengan sebutan “splat operator”, atau “scatter operator”. sama seperti pada JavaScript (ES6) disimbolkan dengan dengan tiga titik

Semenjak php5.6 fitur ini sebenarnya sudah ada yang digunakan untuk unpacking argument.

function show(...$fruits){
return $fruits;
}
var_dump(show(‘apel’, ‘mangga’));
//array(2) { [0]=> string(4) "apel" [1]=> string(6) "mangga"}

nah di update-an selanjutnya fitur ini akan tersedia juga pada array. tentunya untuk melakukan merge beberapa array akan lebih mudah menggunakan operator ini.

Contoh penggunaan:

$roda2 = ['sepeda', 'motor'];// menggunakan spread operator
$kendaraan = ['pesawat', 'kapal',...$roda2, 'kereta'];
// tanpa spread operator
// $kendaraan = array_merge(['pesawat', 'kapal', 'kereta'], $roda2);

selain dengan short syntax [] , spread operator juga dapat digunakan untuk array() dan array yang direturn oleh function.

untuk lebih jelasnya, lihat contoh

// dengan array syntax
$arr1 = array('pisang', 'mangga', 'jambu');
$buah = array(...$arr1, 'kelapa', 'jeruk'); ['pisang', 'mangga','jambu', 'kelapa', 'jeruk'];
// array yang direturn oleh fungsi
function makanan(){
return ['nasi goreng', 'nasi kuning'];
}
$arr2 = [...makanan(), 'gado-gado']; // ['nasi goreng', 'nasi kuning, 'gado-gado']
//contoh lain
$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']

Bagaimana pada Array Associative ?

Sayangnya pada array associative atau array yang menggunakan string sebagai index tidak dapat digunakan, karena supaya penggunaan spread operator pada array selaras dengan unpacking argument. jadi penggunan spread operator tidak sepenuhnya menggantikan fungsi array_merge .

Kesimpulanya:

  • spread operator bisa digunakan untuk mengunpack argument pada function
  • Dapat digunakan oleh short syntax [] atau array() function.
  • Tidak bisa digunakan pada array associative.

Arrow Function

Dengan adanya arrow function a.k.a short closure akan mempersingkat penulisan di php, akan sangat berguna bila diterapkan ketika kita menggunakan fungsi seperti array_map atau array_filter .

Untuk penulisan arrow function pada php diawali dengan keywordfn

fn(parameter_list) => expression

Contoh:

$a = [1,2,3,4,5];$multiply = array_map(fn($n) => $n * $n);
//[1,4,9,16,25]

sebelumnya hingga php 7.4 rilis kita sering menggunkan anonymous function seperti contoh dibawah ini.

$a = [1,2,3,4,5];$multiply = array_map(function($n){
return $n * $n;
}, $a);
//[1,4,9,16,25]

Tidak ada keyword return

dari contoh diatas, arrow function pada php tidak diperbolehkan ada keyword return jadi hanya diperboleh kan 1 expresi , dan tidak dapat multiline.

$a = [1,2,3,4,5];//invalid syntax
array_map(fn($n) => {
$x = $n+1;
return $n * $x;
}, $a);

Type Hinted

Selain itu kita juga dapat menerapkan type hinting pada argument dan return nya.

Type Hinting secara sederhana adalah metode untuk memaksa input-an atau keluaran dengan tipe yang ditentukan.

contoh:

array_map(fn(Post $post): int => $post->id, $posts);//type outputnya integer

Kesimpulan

  • diawali dengan keyword fn
  • hanya bisa melakukan 1 expresi
  • tidak ada keywordreturn
  • argument dan return bisa menerapkan type hinting

Mungkin itu saja sedikit penjelasan tentang salah satu fitur yang akan ada di php 7.4. Mohon dikoreksi jika terdapat kesalahan. Kritik dan saran akan saya terima. Terimakasih banyak.

Referensi:

  • https://wiki.php.net/rfc#php_74
  • https://wiki.php.net/rfc/argument_unpacking
  • https://wiki.php.net/rfc/spread_operator_for_array
  • https://wiki.php.net/rfc/arrow_functions_v2
  • https://stitcher.io/blog/new-in-php-74
  • https://stitcher.io/blog/short-closures-in-php
  • https://kinsta.com/blog/php-7-4/