Menu
CoddyTech

Meninjau Kembali Method Overriding

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 33 dari 91.

Kamu sudah mempelajari method overriding di bab Inheritance. Sekarang, mari kita pelajari hubungannya dengan polimorfisme, salah satu konsep paling ampuh dalam pemrograman berorientasi objek.

Polimorfisme berarti "banyak bentuk." Saat kamu mengganti method di child class, kamu memberi method tersebut bentuk yang berbeda dengan tetap mempertahankan nama yang sama. Keajaibannya terjadi saat kamu bekerja dengan object melalui tipe induknya:

<?php
class Animal {
    public function speak() {
        return "Some sound";
    }
}

class Dog extends Animal {
    public function speak() {
        return "Woof!";
    }
}

class Cat extends Animal {
    public function speak() {
        return "Meow!";
    }
}

function makeAnimalSpeak(Animal $animal) {
    return $animal->speak();
}

echo makeAnimalSpeak(new Dog()) . "\n";
echo makeAnimalSpeak(new Cat());

Output:

Woof!
Meow!

Fungsi makeAnimalSpeak() menerima Animal apa pun. Fungsi ini tidak tahu atau peduli apakah yang diterimanya Dog atau Cat. PHP secara otomatis memanggil method yang sudah di-override dengan benar berdasarkan tipe object yang sebenarnya saat program dijalankan.

Inilah polimorfisme dalam aksi.

Pendekatan ini memungkinkan kamu menulis kode fleksibel yang bekerja dengan sekumpulan object terkait tanpa mengetahui tipe spesifiknya. Kamu dapat menambahkan class hewan baru nanti, dan fungsi ini akan bekerja dengannya secara otomatis.

Poin Penting: Method overriding memungkinkan polimorfisme dengan membuat class yang berbeda merespons pemanggilan method yang sama secara berbeda, ditentukan saat program berjalan berdasarkan tipe object sebenarnya.

challenge icon

Tantangan

Mudah

Mari buat sistem alat musik yang menunjukkan polimorfisme melalui penimpaan method. Kamu akan membuat class dasar Instrument dan dua class turunan yang masing-masing menghasilkan suara unik, lalu menggunakan satu fungsi untuk memainkan alat musik apa pun secara polimorfik.

Kamu akan menyusun kodemu dalam empat file:

  • Instrument.php: Buat class Instrument dengan property $name yang dilindungi dan diatur melalui konstruktor. Tambahkan method play() yang mengembalikan "[name] makes a sound". Ini menjadi perilaku dasar yang akan ditimpa oleh class turunan.
  • Guitar.php: Buat class Guitar yang mewarisi Instrument. Sertakan file induknya. Konstruktor menerima nama dan meneruskannya ke konstruktor induk. Timpa method play() agar mengembalikan "[name] strums a chord".
  • Drum.php: Buat class Drum yang mewarisi Instrument. Sertakan file induknya. Konstruktor menerima nama dan meneruskannya ke konstruktor induk. Timpa method play() agar mengembalikan "[name] beats a rhythm".
  • main.php: Sertakan file Guitar dan Drum. Buat fungsi bernama performWith yang menerima parameter Instrument (dengan petunjuk tipe) dan mengembalikan hasil pemanggilan play() padanya. Fungsi ini menunjukkan polimorfisme. Fungsi ini dapat digunakan dengan tipe alat musik apa pun melalui petunjuk tipe class induk.

Kamu akan menerima dua input: nama gitar dan nama drum. Buat Guitar dan Drum dengan nama-nama tersebut. Berikan masing-masing ke fungsi performWith(), lalu cetak hasilnya: gitar terlebih dahulu, kemudian drum, masing-masing pada barisnya sendiri.

Perhatikan bahwa performWith() menerima Instrument apa pun, tetapi PHP secara otomatis memanggil method play() yang ditimpa dengan benar berdasarkan tipe object sebenarnya saat program dijalankan. Itulah polimorfisme yang sedang bekerja!

Coba sendiri

<?php
// Sertakan file instrumen
require_once 'Guitar.php';
require_once 'Drum.php';

// Baca input
$guitarName = trim(fgets(STDIN));
$drumName = trim(fgets(STDIN));

// TODO: Buat fungsi bernama performWith yang:
// - Menerima parameter Instrument (gunakan petunjuk tipe: Instrument $instrument)
// - Mengembalikan hasil pemanggilan play() pada instrumen

// TODO: Buat Guitar dengan $guitarName dan Drum dengan $drumName
// TODO: Berikan keduanya ke performWith() dan cetak hasilnya (gitar lebih dulu, lalu drum)

?>
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online