Dalam siri ini, saya akan membincangkan asas-asas Pengaturcaraan Berorientasikan Objek PHP (OOP). Kandungan akan disusun mengikut bahagian berurutan, setiap satu memfokuskan pada topik tertentu. Jika anda seorang pemula atau tidak biasa dengan konsep OOP, siri ini direka bentuk untuk membimbing anda langkah demi langkah. Dalam bahagian ini, saya akan membincangkan tentang Polimorfisme dalam PHP. Mari kita mulakan perjalanan belajar PHP OOP bersama-sama!
Sekarang kita akan belajar tentang polimorfisme. Apakah maksud polimorfisme? Istilah "Polymorphism" mempunyai dua bahagian. Satu ialah "Poly," yang bermaksud banyak, dan satu lagi ialah "Morfisme," yang bermaksud bentuk. Jadi, polimorfisme bermaksud banyak bentuk atau pelbagai bentuk. Dalam konteks pengaturcaraan, apabila istilah polimorfisme digunakan, kita boleh mencapainya menggunakan dua konsep.
Konsep pertama ialah Method Overloading, yang juga dikenali sebagai Compile-Time Polymorphism.
Pembebanan kaedah berfungsi seperti ini: Katakan kita mempunyai kaedah dalam kelas yang mengambil satu parameter. Jika kami mengisytiharkan kaedah lain dengan nama yang sama tetapi dengan berbilang parameter, ia adalah sah. Ini bermakna kita boleh mengisytiharkan dua kaedah dengan nama yang sama dalam kelas, tetapi bilangan parameter mestilah berbeza. Kemudian, apabila kita mencipta contoh kelas ini dan menggunakan kaedah ini, keputusan kaedah untuk dipanggil akan bergantung pada berapa banyak parameter yang dihantar kepadanya. Akibatnya, kaedah yang sama akan berkelakuan atau bertindak secara berbeza berdasarkan parameter. Sekarang mari kita lihat contoh kod.
class Vehicle { public function getTotal($first, $second) { echo $first . " " . $second . "\n"; } public function getTotal($first, $second, $third) { echo $first . " " . $second . " " . $third . "\n"; } } $vehicle = new Vehicle(); $vehicle->getTotal(10, 20); $vehicle->getTotal(10, 20, 30);
Di sini kita dapat melihat bahawa dua kaedah bernama getTotal telah diisytiharkan dalam kelas Kenderaan. Kedua-dua kaedah ini mengambil parameter yang berbeza. Sekarang, apabila kita mencipta contoh kelas Kenderaan dan menggunakan kaedah ini, tingkah laku mereka bergantung pada parameter yang disediakan. Sebagai contoh, selepas mencipta contoh kelas Kenderaan, kaedah getTotal pertama kali dipanggil dengan 2 parameter, menyebabkan kaedah getTotal pertama kelas dipanggil. Kemudian, kaedah getTotal dipanggil semula dengan 3 parameter, menyebabkan kaedah getTotal kedua kelas dipanggil. Jadi, kita boleh faham bagaimana kaedah yang sama boleh berkelakuan berbeza.
Walau bagaimanapun, jika anda menjalankan kod ini, ia tidak akan berfungsi kerana PHP tidak menyokong kaedah lebih muatan atau polimorfisme masa kompilasi. Tetapi ia menyokong kaedah mengatasi atau polimorfisme masa jalan. Kami hanya menggunakan contoh ini untuk memahami konsep secara teori.
Konsep kedua ialah Method Overriding, juga dikenali sebagai Runtime Polymorphism.
Pengawalan kaedah berfungsi seperti berikut: Katakan terdapat kaedah dalam kelas yang mungkin atau mungkin tidak mengambil parameter dan melaksanakan tugas tertentu. Jika kelas ini diwarisi oleh kelas lain, dan kaedah dengan nama yang sama diisytiharkan dalam kelas anak, proses ini dipanggil kaedah mengatasi atau polimorfisme masa jalan. Dalam erti kata lain, kita boleh mengisytiharkan kaedah dengan nama yang sama dalam kelas kanak-kanak, dan bilangan parameter boleh sama atau berbeza. Ia akan melaksanakan tugas yang berbeza. Kemudian, apabila kita mencipta contoh kelas kanak-kanak dan menggunakan kaedah itu, keputusan sama ada untuk memanggil kaedah daripada kelas induk atau anak akan bergantung pada parameter yang diluluskan. Akibatnya, kaedah yang sama akan mempamerkan tingkah laku atau tindakan yang berbeza berdasarkan parameter. Sekarang mari kita lihat contoh kod.
class Vehicle { public function getTotal($first, $second) { echo $first . " " . $second . "\n"; } public function getTotal($first, $second, $third) { echo $first . " " . $second . " " . $third . "\n"; } } $vehicle = new Vehicle(); $vehicle->getTotal(10, 20); $vehicle->getTotal(10, 20, 30);
Apabila kaedah getTotal dipanggil dengan dua parameter daripada contoh kelas kanak-kanak, ia menyemak pada masa jalan jika kaedah sedemikian dengan dua parameter wujud dalam kelas kanak-kanak. Jika tidak, kelas anak akan mewarisi dan memanggil kaedah daripada kelas induknya.
Kemudian, apabila kaedah getTotal dipanggil semula dengan tiga parameter, ia menyemak sekali lagi jika kaedah dengan tiga parameter wujud dalam kelas anak. Apabila mendapati kaedah itu telah ditindih dalam kelas kanak-kanak dengan tiga parameter, ia memanggil kaedah getTotal daripada kelas kanak-kanak.
Jika kedua-dua kelas induk dan anak mempunyai kaedah dengan parameter yang sama, kaedah yang diganti dalam kelas anak akan dipanggil dalam kes ini juga.
Ini pada asasnya cara mengatasi kaedah berfungsi. Kini kami memahami cara untuk mengatasi kaedah dan cara ia beroperasi.
Saya harap perbincangan ini telah memberikan anda pemahaman awal tentang topik yang diliputi dalam pelajaran ini. Itu sahaja untuk hari ini; kita jumpa lagi dalam pelajaran seterusnya.
Anda boleh berhubung dengan saya di GitHub dan Linkedin.
Atas ialah kandungan terperinci PHP OOP Bahagian-Polimorfisme. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!