Rumah >pembangunan bahagian belakang >masalah PHP >Apakah penutupan (fungsi tanpa nama) dan bagaimana saya menggunakannya dalam php?
penutupan, yang juga dikenali sebagai fungsi tanpa nama, adalah fungsi yang tidak diisytiharkan dengan nama. Mereka ditakrifkan menggunakan kata kunci fungsi diikuti oleh sepasang kurungan untuk parameter (jika ada) dan sepasang pendakap keriting yang mengandungi badan fungsi. Dalam PHP, penutupan sangat kuat kerana mereka boleh mengakses pembolehubah dari skop sekitar mereka, walaupun selepas skop sekitarnya selesai. Ini dikenali sebagai penutupan ke atas pembolehubah .
Berikut adalah contoh mudah:
<code class="php"> & lt ;? php $ message = & quot; hello dari luar! & Quot ;; $ tutup = fungsi () gunakan ($ mesej) {echo $ message; }; $ penutupan (); // output: Hello dari luar! ? & gt; </code>
Dalam contoh ini, $ closure
adalah penutupan. Ia mengakses pembolehubah $ mesej
yang ditakrifkan di luar skop penutupan. Kata kunci adalah penting; Ia secara eksplisit menceritakan penutupan untuk "menangkap" pembolehubah dari skop induk. Tanpa menggunakan ($ mesej)
, PHP akan membuang ralat, sebagai $ mesej
tidak akan tersedia dalam skop penutupan.
. $ nama. & quot;! & quot ;; }; $ salam (& quot; dunia & quot;); // output: Helo, dunia! ? & Gt; Ini amat berguna untuk panggilan balik atau fungsi pembantu kecil yang digunakan sekali sahaja. Ini membolehkan untuk mewujudkan fungsi yang mengekalkan keadaan tanpa menggunakan pembolehubah global, yang membawa kepada kod yang lebih bersih dan lebih banyak dikekalkan. Ini membolehkan paradigma pengaturcaraan berfungsi dalam php. PHP?
Pembolehubah lulus ke penutupan:
Pembolehubah disampaikan kepada penutupan melalui senarai parameter dalam definisi fungsi, sama seperti fungsi biasa. Untuk pembolehubah dari skop sekitar, anda menggunakan kata kunci yang diikuti dengan senarai pembolehubah yang tertutup dalam kurungan. Anda boleh lulus pembolehubah mengikut nilai (lalai) atau dengan rujukan menggunakan & amp;
sebelum nama pembolehubah dalam Gunakan
pernyataan.
<code class="php"> & lt ;? php $ x = 10; $ tutup = fungsi ($ y) gunakan ($ x) {return $ x $ y; }; echo $ penutupan (5); // output: 15 $ closureByRef = function (& amp; $ z) menggunakan (& amp; $ x) {$ x = 20; $ z = $ x * 2; }; $ w = 5; $ ClosureByRef ($ w); echo $ x; // output: 20 echo $ w; // output: 40? & Gt; </code>
Pembolehubah lulus dari penutupan:
Anda boleh mengembalikan nilai dari penutupan menggunakan return
pernyataan, sama seperti dalam fungsi biasa. Nilai yang dikembalikan kemudiannya boleh diberikan kepada pembolehubah di luar penutupan.
<code class="php"> & lt ;? php $ closure = function ($ a, $ b) {return $ a * $ b; }; $ hasil = $ penutupan (4, 5); // $ hasil akan menjadi 20 echo $ result; ? & gt; </code>
Ya, penutupan sering digunakan dengan ciri -ciri canggih seperti panggilan balik dan pengendalian acara di PHP. Mereka sangat sesuai untuk senario ini kerana fleksibiliti dan sintaks ringkas mereka.
Sebagai contoh, fungsi array seperti array_map
, array_filter
, dan usort
sering mengambil penutupan sebagai panggilan balik untuk memproses elemen array. $ squaredNumbers = array_map (fungsi ($ n) {return $ n * $ n;}, $ nombor); print_r ($ squaredNumbers); // output: array ([0] = & gt; 1 [1] = & gt; 4 [2] = & gt; 9 [3] = & gt; 16 [4] = & gt; 25)? & Gt; Apabila peristiwa berlaku, penutupan yang sepadan dilaksanakan. Ini membolehkan kod decoupled dan modular. Sebagai contoh, dalam sistem peristiwa hipotetikal:
<code class="php"> & lt ;? php // sistem peristiwa hipotetikal-ganti dengan sistem acara sebenar anda $ eventManager- & gt; Log masuk. & quot ;; ?</code>
Atas ialah kandungan terperinci Apakah penutupan (fungsi tanpa nama) dan bagaimana saya menggunakannya dalam php?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!