Rumah >pembangunan bahagian belakang >masalah PHP >Apakah penutupan (fungsi tanpa nama) dan bagaimana saya menggunakannya dalam php?

Apakah penutupan (fungsi tanpa nama) dan bagaimana saya menggunakannya dalam php?

Johnathan Smith
Johnathan Smithasal
2025-03-10 18:11:06675semak imbas

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> 

Bolehkah penutupan dalam PHP digunakan dengan ciri -ciri canggih lain seperti panggilan balik atau pengendalian acara?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn