Di JavaScript, Anda dapat menentukan fungsi anonim yang dijalankan segera:
(function () { /* do something */ })()
Bisakah Anda melakukan hal seperti itu di PHP?
php
javascript
function
Emanuil Rusev
sumber
sumber
call_user_func(function(){/* stuff */})
caranya?Jawaban:
Untuk PHP7: lihat jawaban Yasuo Ohgaki :
(function() {echo 'Hi';})();
Untuk versi sebelumnya: satu-satunya cara untuk menjalankannya dengan segera yang dapat saya pikirkan adalah
sumber
call_user_func
In
PHP 7
adalah melakukan hal yang sama di javascriptOutputnya adalah:
sumber
Tentu saja Anda dapat menggunakan
call_user_func
, tetapi masih ada alternatif lain yang cukup sederhana:sumber
run
fungsi Anda di beberapa bagian lain dari kode karena tidak ada pegangan ke fungsi Anda yang ada setelah baris yang segera mengeksekusinya.run()
adalah untuk segera menjalankan fungsi tanpa nama yang diteruskan ke sana. Sama seperticall_user_func()
, hanya tidak ada parameter yang dilewatkan.$f();
dan mungkin lebih cepat jika mesin yang Anda gunakan tidak mengoptimalkan untuk kasus khusus di manacall_user_func
hanya memiliki satu argumen fungsi. Ini karenacall_user_func
mendukung penerusan beberapa parameter dan argumen pertamanya mendukung string sebagai argumen atau fungsi. Yang mengatakan, jikacall_user_func
lebih mudah dibaca, saya tidak akan menggunakanrun
kecuali kode tersebut terletak di suatu tempat di bagian bawah piramida .run
dancall_user_func
.call_user_func
memiliki kelemahan inheren jika dibandingkanrun
karenarun
hanya melakukan satu hal, sedangkancall_user_func
mendukung fitur tambahan selain melakukan apa yangrun
dilakukannya. Anda dapat mencoba tes putaran cepat ( mis. ) Untuk melihat mana yang lebih cepat pada mesin Anda.Ini yang paling sederhana untuk PHP 7.0 atau yang lebih baru.
Artinya buat closure, lalu panggil fungsi dengan mengikuti "()". Bekerja seperti JS berkat urutan evaluasi variabel yang seragam.
https://3v4l.org/06EL3
sumber
sumber
Catatan, jawaban diterima baik-baik saja tetapi dibutuhkan 1,41x lebih lama (41% lebih lambat) daripada mendeklarasikan fungsi dan memanggilnya dalam dua baris.
[Saya tahu ini bukanlah jawaban yang benar-benar baru, tetapi saya merasa sangat berharga menambahkan ini di suatu tempat untuk pengunjung.]
Rincian:
Hasil:
sumber
Saya mencobanya dengan cara ini, tetapi ini lebih bertele-tele daripada jawaban teratas dengan menggunakan operator (atau fungsi) apa pun yang memungkinkan Anda untuk menentukan fungsi terlebih dahulu:
sumber
$hack = function(){...}; $hack()
?Ini bukan jawaban langsung, tapi solusi. Menggunakan PHP> = 7. Mendefinisikan kelas anonim dengan metode bernama dan membangun kelas dan memanggil metode itu segera.
sumber
Tidak dieksekusi dengan segera, tetapi mendekati;)
sumber