Berasal dari latar belakang C ++;)
Bagaimana saya bisa membebani fungsi PHP?
Satu definisi fungsi jika ada argumen, dan yang lain jika tidak ada argumen? Apakah mungkin di PHP? Atau haruskah saya menggunakan if lagi untuk memeriksa apakah ada parameter yang lulus dari $ _GET dan POST ?? dan menghubungkannya?
php
arguments
overloading
Vamsi Krishna B
sumber
sumber
overloading
, daripada yang ditanyakan dalam pertanyaan. (Lihat jawaban yang diterima untuk lebih jelasnya.)Jawaban:
Anda tidak dapat membebani fungsi PHP secara berlebihan. Tanda tangan fungsi hanya didasarkan pada namanya dan tidak menyertakan daftar argumen, jadi Anda tidak dapat memiliki dua fungsi dengan nama yang sama. Metode overloading kelas berbeda dalam PHP dibandingkan dengan banyak bahasa lainnya. PHP menggunakan kata yang sama tetapi menggambarkan pola yang berbeda.
Anda bisa, bagaimanapun, mendeklarasikan fungsi variadic yang mengambil sejumlah variabel argumen. Anda akan menggunakan
func_num_args()
danfunc_get_arg()
untuk mendapatkan argumen yang berlalu, dan menggunakannya secara normal.Sebagai contoh:
sumber
myFunc(/*...*/)
.PHP tidak mendukung metode overload tradisional, namun satu cara Anda mungkin dapat mencapai apa yang Anda inginkan, adalah dengan menggunakan
__call
metode ajaib:sumber
__call()
sebelumnya. Cukup kreatif (jika sedikit bertele-tele)! +1Untuk over load suatu fungsi cukup lakukan pass parameter sebagai null secara default,
sumber
overload
suatu fungsi - walaupun begitu, Anda membuat poin berguna bahwa pembaca harus sadar.Ini mungkin diretas bagi sebagian orang, tetapi saya belajar dengan cara ini dari bagaimana Cakephp melakukan beberapa fungsi dan mengadaptasinya karena saya menyukai fleksibilitas yang diciptakannya.
Idenya adalah Anda memiliki berbagai jenis argumen, array, objek dll, maka Anda mendeteksi apa yang Anda berikan dan pergi dari sana
sumber
sumber
Bagaimana dengan ini:
sumber
Di PHP 5.6 Anda dapat menggunakan operator percikan
...
sebagai parameter terakhir dan menghapusfunc_get_args()
danfunc_num_args()
:Anda dapat menggunakannya untuk membongkar argumen juga:
Setara dengan:
sumber
sumber
PHP tidak mendukung kelebihan muatan untuk saat ini. Semoga ini akan diimplementasikan dalam versi lain seperti bahasa pemrograman lainnya.
Lihat pustaka ini, ini memungkinkan Anda untuk menggunakan PHP Overloading dalam hal penutupan. https://github.com/Sahil-Gulati/Overloading
sumber
Sayangnya tidak ada kelebihan dalam PHP seperti yang dilakukan di C #. Tetapi saya punya sedikit trik. Saya mendeklarasikan argumen dengan nilai null default dan memeriksanya dalam suatu fungsi. Dengan begitu fungsi saya dapat melakukan hal-hal yang berbeda tergantung pada argumen. Di bawah ini adalah contoh sederhana:
sumber