PHP 7.4 akan menyertakan fungsi panah (notasi singkat untuk fungsi anonim)

Voting pada sintaks disingkat untuk fungsi selesai (51 suara mendukung, 8 menentang).


Itu:


$result = array_filter($paths, function ($v) use ($names) { return in_array($v, $names); }); 

Itu menjadi:


 $result = array_filter($paths, fn($v) => in_array($v, $names)); 

Detail di bawah potongan


Sintaks baru adalah:


Sintaks


 fn(_) => _ 

Dalam tanda tangan dari fungsi panah, seperti dalam fungsi biasa, Anda dapat menentukan jenis, standar, dll.


 fn(array $x) => $x; fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest; 

Perhatian! Kata kunci fn , yang berarti ketidakcocokan mundur!


Gagasan sintaksis lainnya (dibuang)


Opsi yang dipertimbangkan:


  //  ,        ($x) => $x * $y //   ,     ,     { ($x) => $x + $y } //     Hack;       ($x) ==> $x * $y // ,      ($x) -> $x * $y //      $x-- > $x*$y $x --> $x * $y //    Rust,    |$x| => $x * $y 

dan beberapa lainnya


Variabel Penutup


Penting! Tidak seperti versi php sebelumnya, di mana itu perlu untuk secara eksplisit mengatur variabel yang dapat dikunci dengan operator penggunaan , fungsi panah secara implisit menutup seluruh skala induk pada dirinya sendiri.


Berikut ini adalah entri yang setara:


 $y = 1; $fn1 = fn($x) => $x + $y; $fn2 = function ($x) use ($y) { return $x + $y; }; 

$ Variabel ini ditutup sama seperti variabel lainnya. Jika ini adalah perilaku yang tidak diinginkan, Anda dapat menonaktifkannya dengan kata kunci statis .


 class Test { public function method() { $fn = fn() => var_dump($this); $fn(); // object(Test)#1 { ... } $fn = static fn() => var_dump($this); $fn(); // Error: Using $this when not in object context } } 

Variabel penutup dalam fungsi panah muncul berdasarkan nilai (berbeda dengan bahasa Go, misalnya). Yaitu mengubah variabel di dalam suatu fungsi tidak akan mengubah variabel dalam lingkup induknya.


Kesimpulan


Kode telah menjadi jauh lebih kompak, dan meskipun tidak sekompak dalam javascript dan beberapa bahasa lain, masih akan jauh lebih menyenangkan untuk menulis:


 $result = Collection::from([1, 2]) ->map(fn($v) => $v * 2) ->reduce(fn($tmp, $v) => $tmp + $v, 0); echo $result; //6 

Tidak seperti beberapa bahasa lain, fungsi panah di php tidak mendukung banyak pernyataan yang dipisahkan oleh karakter ; , karena ini (menurut penulis RFC) bertentangan dengan gagasan sintaksis steno. Mungkin ini akan direvisi di masa depan.


Kami pasti akan membahas fungsi panah di php secara detail di podcast Zinc Prod , jadi pastikan untuk berlangganan.


Tautan RFC

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


All Articles