Dalam PHP, apa yang Anda maksud dengan overloading fungsi dan overriding fungsi. dan apa perbedaan keduanya? tidak bisa mencari tahu apa perbedaan di antara mereka.
php
overloading
overriding
Parag
sumber
sumber
Jawaban:
Overloading adalah mendefinisikan fungsi yang memiliki tanda tangan yang serupa, namun memiliki parameter yang berbeda. Overriding hanya berkaitan dengan kelas turunan, di mana kelas induk telah mendefinisikan metode dan kelas turunan ingin menimpa metode itu.
Di PHP, Anda hanya bisa membebani metode menggunakan metode ajaib
__call
.Contoh penimpaan :
sumber
__call
.Kelebihan fungsi terjadi ketika Anda menetapkan nama fungsi yang sama dua kali (atau lebih) menggunakan serangkaian parameter yang berbeda. Sebagai contoh:
Pada contoh di atas, fungsinya
compute
kelebihan beban dengan dua tanda tangan parameter yang berbeda. * Ini belum didukung di PHP. Alternatifnya adalah dengan menggunakan argumen opsional:Fungsi penimpaan terjadi ketika Anda memperluas kelas dan menulis ulang fungsi yang ada di kelas induk:
Misalnya,
compute
menimpa perilaku yang ditetapkan dalamAddition
.sumber
Subtraction
kelas memperpanjangAddition
kelas. :)Sebenarnya, tidak ada perbedaan, karena Anda tidak dapat melakukan keduanya :)
Fungsi overriding bisa dilakukan dengan ekstensi PHP seperti APD, tetapi sudah usang dan afaik versi terakhir tidak dapat digunakan.
Fungsi overloading di PHP tidak dapat dilakukan karena pengetikan dinamis, yaitu, dalam PHP Anda tidak "mendefinisikan" variabel menjadi tipe tertentu. Contoh:
Setiap variabel memiliki tipe yang berbeda, namun Anda dapat mengetahui jenisnya sebelum dieksekusi (lihat yang keempat). Sebagai perbandingan, bahasa lain menggunakan:
Dalam contoh terakhir, Anda harus secara paksa mengatur tipe variabel (sebagai contoh, saya menggunakan tipe data "sesuatu").
"Masalah" lain mengapa kelebihan fungsi tidak dimungkinkan dalam PHP: PHP memiliki fungsi yang disebut func_get_args (), yang mengembalikan array argumen saat ini, sekarang pertimbangkan kode berikut:
Mempertimbangkan kedua fungsi menerima sejumlah argumen, mana yang harus dipilih oleh kompiler?
Akhirnya, saya ingin menunjukkan mengapa jawaban di atas sebagian salah; fungsi overloading / overriding TIDAK sama dengan metode overloading / overriding.
Di mana metode seperti fungsi tetapi khusus untuk kelas, dalam hal ini, PHP mengizinkan overriding di kelas, tetapi sekali lagi tidak ada overloading, karena bahasa semantik.
Untuk menyimpulkan, bahasa seperti Javascript memungkinkan penggantian (tapi sekali lagi, tidak ada pembebanan berlebihan), namun mereka juga dapat menunjukkan perbedaan antara menimpa fungsi pengguna dan metode:
sumber
Contoh overloading
sumber
Meskipun paradigma overloading tidak sepenuhnya didukung oleh PHP, efek yang sama (atau sangat mirip) dapat dicapai dengan parameter default (seperti yang disebutkan sebelumnya).
Jika Anda mendefinisikan fungsi Anda seperti ini:
Ketika Anda memanggil fungsi ini seperti:
Anda akan mendapatkan satu fungsionalitas (# 1), tetapi jika Anda menyebutnya dengan parameter seperti:
Anda akan mendapatkan fungsionalitas lain (# 2). Itulah efek kelebihan beban - fungsionalitas yang berbeda tergantung pada parameter input fungsi.
Saya tahu, seseorang akan bertanya sekarang apa fungsi yang akan didapat jika dia memanggil fungsi ini sebagai f (0).
sumber
Saya ingin menunjukkan di sini bahwa Overloading di PHP memiliki arti yang sangat berbeda dibandingkan dengan bahasa pemrograman lainnya. Banyak orang mengatakan bahwa overloading tidak didukung dalam PHP dan oleh definisi konvensional overloading, ya fungsionalitas itu tidak tersedia secara eksplisit.
Namun, definisi overloading yang benar dalam PHP benar-benar berbeda.
Dalam PHP overloading mengacu pada pembuatan properti dan metode secara dinamis menggunakan metode ajaib seperti __set () dan __get (). Metode kelebihan ini dipanggil ketika berinteraksi dengan metode atau properti yang tidak dapat diakses atau tidak dideklarasikan.
Berikut ini tautan dari manual PHP: http://www.php.net/manual/en/language.oop5.overloading.php
sumber
Metode overloading terjadi ketika dua metode atau lebih dengan nama metode yang sama tetapi jumlah parameter yang berbeda dalam satu kelas. PHP tidak mendukung kelebihan metode. Metode overriding berarti dua metode dengan nama metode yang sama dan jumlah parameter yang sama di dua kelas yang berbeda berarti kelas induk dan kelas anak.
sumber
Ada beberapa perbedaan antara Fungsi overloading & overriding meskipun keduanya berisi nama fungsi yang sama. Dalam overloading, antara fungsi nama yang sama mengandung berbagai jenis argumen atau tipe pengembalian; Seperti: "function add (int a, int b)" & " fungsi add (float a, float b); Di sini fungsi add () kelebihan beban. Dalam kasus mengesampingkan baik argumen dan fungsi fungsinya sama. Umumnya ditemukan dalam warisan atau dalam sifat. Kita harus mengikuti beberapa taktik untuk memperkenalkan , fungsi apa yang akan dieksekusi sekarang. Jadi, dalam meng-override programmer mengikuti beberapa taktik untuk mengeksekusi fungsi yang diinginkan dimana dalam overloading program dapat secara otomatis mengidentifikasi fungsi yang diinginkan ... Terima kasih!
sumber
Overloading: Di dunia nyata, overloading berarti memberikan beberapa hal tambahan kepada seseorang. Seperti di dunia nyata Kelebihan beban dalam PHP berarti memanggil fungsi tambahan. Dengan cara lain Anda dapat mengatakan itu memiliki fungsi yang lebih ramping dengan parameter yang berbeda. Dalam PHP Anda dapat menggunakan kelebihan dengan fungsi ajaib misalnya __gget, __set, __call dll.
Contoh Kelebihan Beban:
Mengesampingkan: Dalam mengesampingkan pemrograman berorientasi objek adalah untuk menggantikan metode induk di kelas anak. Dalam mengesampingkan Anda dapat mendeklarasikan ulang metode kelas induk di kelas anak. Jadi, pada dasarnya tujuan dari mengganti adalah untuk mengubah perilaku metode kelas induk Anda.
Contoh penimpaan:
sumber
PHP 5.xx tidak mendukung kelebihan beban inilah sebabnya PHP tidak sepenuhnya OOP.
sumber