Menu
CoddyTech

Mengimplementasikan Interface

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

Sekarang setelah kamu memahami apa itu interface, mari kita lihat cara mengimplementasikannya. Sebuah class mengimplementasikan interface menggunakan kata kunci implements, dan harus menyediakan implementasi konkret untuk semua method yang dideklarasikan dalam interface tersebut.

<?php
interface Printable {
    public function print();
}

class Document implements Printable {
    private $content;
    
    public function __construct($content) {
        $this->content = $content;
    }
    
    public function print() {
        return "Printing: " . $this->content;
    }
}

$doc = new Document("Hello World");
echo $doc->print();

Output:

Printing: Hello World

class Document mengimplementasikan Printable dengan menyediakan versinya sendiri dari method print(). Jika kamu lupa mengimplementasikan method yang diwajibkan, PHP akan menampilkan error fatal.

Class yang berbeda dapat mengimplementasikan interface yang sama dengan caranya masing-masing:

<?php
class Invoice implements Printable {
    private $amount;
    
    public function __construct($amount) {
        $this->amount = $amount;
    }
    
    public function print() {
        return "Invoice Total: $" . $this->amount;
    }
}

$invoice = new Invoice(150);
echo $invoice->print();

Output:

Invoice Total: $150

Document dan Invoice sama-sama memenuhi kontrak Printable, tetapi masing-masing menangani pencetakan dengan cara berbeda sesuai tujuannya.

Poin Utama: Gunakan implements untuk menghubungkan class dengan interface, lalu definisikan semua method yang diwajibkan. Setiap class yang mengimplementasikan interface menyediakan logikanya sendiri sekaligus menjamin bahwa semua tanda tangan method yang sama tersedia.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pesan yang menunjukkan cara berbagai class dapat menerapkan interface yang sama dengan caranya masing-masing.

Kamu akan membuat tiga file yang bekerja bersama untuk menangani berbagai jenis pesan:

  • Messageable.php: Definisikan interface Messageable dengan dua signature method: compose($content) dan deliver(). Interface ini menetapkan kontrak yang harus diikuti semua jenis pesan.
  • Email.php: Buat class Email yang menerapkan Messageable. Sertakan file interface di bagian atas. Class ini harus memiliki property privat $recipient dan property privat $body. Constructor menerima alamat penerima. Terapkan compose($content) untuk menyimpan konten di $body dan mengembalikan "Email composed". Terapkan deliver() untuk mengembalikan "Email to [recipient]: [body]".
  • SMS.php: Buat class SMS yang juga menerapkan Messageable. Sertakan file interface di bagian atas. Class ini harus memiliki property privat $phoneNumber dan property privat $text. Constructor menerima nomor telepon. Terapkan compose($content) untuk menyimpan konten di $text dan mengembalikan "SMS composed". Terapkan deliver() untuk mengembalikan "SMS to [phoneNumber]: [text]".

Di main.php, sertakan file Email dan SMS. Kamu akan menerima tiga input: alamat email, nomor telepon, dan konten pesan. Buat object Email dengan alamat email dan object SMS dengan nomor telepon. Panggil compose() dengan konten pesan pada kedua object, lalu cetak setiap hasil pada barisnya sendiri. Setelah itu, panggil deliver() pada kedua object, lalu cetak setiap hasil pada barisnya sendiri. Urutannya adalah: compose email, compose SMS, deliver email, deliver SMS.

Kedua class memenuhi kontrak Messageable yang sama, tetapi masing-masing menangani penyusunan dan pengiriman pesan sesuai tujuannya sendiri: email menampilkan alamat penerima, sedangkan pesan SMS menampilkan nomor telepon.

Coba sendiri

<?php
require_once 'Email.php';
require_once 'SMS.php';

// Baca input
$emailAddress = trim(fgets(STDIN));
$phoneNumber = trim(fgets(STDIN));
$messageContent = trim(fgets(STDIN));

// TODO: Buat object Email dengan alamat email

// TODO: Buat object SMS dengan nomor telepon

// TODO: Panggil compose() pada kedua object dan cetak hasilnya
// Urutan: compose email, lalu compose SMS

// TODO: Panggil deliver() pada kedua object dan cetak hasilnya
// Urutan: deliver email, lalu deliver SMS
?>
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