Saya bertanya-tanya apakah mungkin atau tidak untuk melewatkan fungsi sebagai parameter di PHP; Saya ingin sesuatu seperti saat Anda memprogram di JS:
object.exampleMethod(function(){
// some stuff to execute
});
Yang saya inginkan adalah menjalankan fungsi itu di suatu tempat di exampleMethod. Apakah itu mungkin di PHP?
Jawaban:
Itu mungkin jika Anda menggunakan PHP 5.3.0 atau lebih tinggi.
Lihat Fungsi Anonim di manual.
Dalam kasus Anda, Anda akan mendefinisikan
exampleMethod
seperti ini:sumber
create_function
create_function()
. Ini tidak persis sama, karena Anda harus meneruskan fungsi Anda sebagai string kode, yang kemudianeval()
berada di belakang layar. Tidak ideal, tetapi Anda mungkin bisa menggunakannya.exampleMethod(strpos);
Hanya untuk menambah yang lain, Anda dapat memberikan nama fungsi:
Ini akan bekerja di PHP4.
sumber
Anda juga dapat menggunakan create_function untuk membuat fungsi sebagai variabel dan menyebarkannya. Padahal, saya suka perasaan fungsi anonim lebih baik. Pergi zombat.
sumber
Cukup kodekan seperti ini:
akan sangat bagus jika Anda dapat menemukan sesuatu seperti ini (terinspirasi oleh Laravel Illuminate):
sumber
VERSI PHP> = 5.3.0
Contoh 1: dasar
Contoh 2: objek std
Contoh 3: panggilan kelas non-statis
Contoh 4: panggilan kelas statis
sumber
Menurut jawaban @ zombat, sebaiknya validasi Fungsi Anonim dulu:
Atau validasi tipe argumen sejak PHP 5.4.0:
sumber
Diuji untuk PHP 5.3
Seperti yang saya lihat di sini, Fungsi Anonim dapat membantu Anda: http://php.net/manual/en/functions.anonymous.php
Apa yang mungkin Anda perlukan dan tidak disebutkan sebelumnya adalah cara meneruskan fungsi tanpa membungkusnya di dalam fungsi yang dibuat dengan cepat . Seperti yang akan Anda lihat nanti, Anda harus meneruskan nama fungsi yang ditulis dalam string sebagai parameter, periksa "callability" -nya lalu panggil.
Fungsi untuk melakukan pengecekan:
Kemudian, untuk menyebutnya, gunakan bagian kode ini (jika Anda juga membutuhkan parameter, letakkan di array), lihat di: http://php.net/manual/en/function.call-user-func.php
sebagai berikut (dengan cara yang serupa, tanpa parameter,):
Berikut adalah kelas yang menjelaskan cara melakukan sesuatu yang serupa:
dan contoh penggunaan
sumber
Contoh sederhana menggunakan kelas:
sumber