Fungsi Panah di PHP 7.4


Fungsi panah, juga disebut penutupan pendek , adalah cara yang baik untuk menulis kode bersih dalam PHP. Bentuk tulisan ini akan berguna ketika melewati penutupan ke fungsi seperti array_map atau array_filter .


Contoh:


 //   Post $posts = [/* … */]; $ids = array_map(fn($post) => $post->id, $posts); 

Dulu ditulis seperti ini:


 $ids = array_map(function ($post) { return $post->id; }, $posts); 

Secara singkat:


  • Tersedia sejak PHP 7.4
  • Mulai dengan kata kunci fn
  • Hanya dapat memiliki satu ekspresi, yang juga merupakan nilai balik.
  • Tidak didukung return
  • Jenis-hintihg didukung dalam argumen dan mengembalikan nilai

Cara stereotip menulis contoh di atas:


 $ids = array_map(fn(Post $post): int => $post->id, $posts); 

Dua hal penting lainnya:


  • Operator variabel didukung
  • Tautan didukung untuk argumen dan mengembalikan nilai

Jika Anda ingin mengembalikan nilai dengan referensi, gunakan sintaks berikut:


 fn&($x) => $x 

Fungsi panah menerapkan fungsi yang sama seperti yang Anda harapkan dari penutupan normal, mereka hanya berisi satu ekspresi.


Tidak ada multiline


Anda membaca itu dengan benar: sirkuit pendek hanya dapat berisi satu ekspresi. Ini berarti Anda tidak dapat memiliki banyak baris di dalamnya.


Argumennya adalah ini: tujuan dari hubung singkat adalah untuk mengurangi verbositas. fn , pasti lebih pendek dari function dalam segala hal. Melewati function dan return kata kunci tidak mengubah apa pun, tetapi membuat kode lebih mudah dibaca.


Apakah Anda setuju dengan pendapat ini? Pada saat yang sama, dengan sintaks baru untuk fungsi single-line, ada banyak multi-line yang tidak akan terhambat oleh peningkatan seperti itu.


Mudah-mudahan, di masa depan, akan ada RFC dengan pengumuman singkat dan fungsi multi-line, tapi sejauh ini hanya mimpi saya.


Variabel dari lingkup luar


Perbedaan signifikan lainnya antara kesalahan pendek dan normal adalah bahwa yang pertama tidak memerlukan penggunaan kata kunci yang digunakan untuk mengakses data dari lingkup eksternal.


 $modifier = 5; array_map(fn($x) => $x * $modifier, $numbers); 

Penting untuk dicatat bahwa Anda tidak dapat mengubah variabel-variabel ini. Nilai terkait dengan nilai, bukan oleh referensi. Ini berarti Anda dapat memodifikasi $modifier di dalam hubung singkat, tetapi ini tidak akan mempengaruhi variabel $modifier terletak di luar.


Satu-satunya pengecualian adalah $this , yang akan berfungsi sama persis dengan di versi normal:


 array_map(fn($x) => $x * $this->modifier, $numbers); 

Peluang masa depan


Saya sudah menyebutkan ide hubungan pendek multi-line di atas. Saran lain yang bermanfaat adalah mengizinkan penggunaan sintaks pendek di kelas, misalnya untuk getter dan setter:


 class Post { private $title; fn getTitle() => $this->title; } 

Secara umum, fungsi panah adalah fitur yang sangat bagus, meskipun masih ada ruang untuk perbaikan.


Apakah Anda memiliki pemikiran tentang ini?

Source: https://habr.com/ru/post/id476242/


All Articles