5. INTERFACES

Interfaces memungkinkan kita mendefinisikan kontrak yang harus diikuti oleh sebuah class. Interface hanya berisi deklarasi method dan konstanta, tanpa implementasi. Setiap class yang mengimplementasikan sebuah interface wajib menyediakan implementasi untuk semua method yang telah didefinisikan dalam interface tersebut.

Sintaks Interface dalam PHP
interface NamaInterface {
    public function namaMethod();
}

Untuk mengimplementasikan interface dalam class, gunakan kata kunci implements. Jika ada lebih dari satu interface, pisahkan dengan koma. Contoh implementasi interface:

AYO PAHAMI!


Petunjuk:

  1. Perhatikan kode program PHP yang ditampilkan di kotak sebelah kiri.
  2. Ketik ulang seluruh baris kode tersebut ke dalam editor di sebelah kanan.
  3. Pastikan setiap baris dan struktur penulisan sesuai dengan contoh (termasuk titik koma, kurung, dll).
  4. Tekan tombol RUN di dalam editor untuk menjalankan program.
  5. Perhatikan hasil keluaran di bawah editor. Apa yang ditampilkan?
<?php
interface Printable {
    public function printOutput();
}

class ImageComponent implements Printable {
    public function printOutput() {
        echo "Mencetak gambar...";
    }
}

// Penggunaan
$obj = new ImageComponent();
$obj->printOutput();
?>

Kode di atas menunjukkan cara mengimplementasikan interface Printable dalam class ImageComponent menggunakan kata kunci implements. Interface mendefinisikan method printOutput() yang wajib diimplementasikan oleh class mana pun yang menggunakannya. Dalam class ImageComponent, method tersebut diisi dengan perintah echo "Mencetak gambar...". Ketika objek dari class ini dibuat dan method printOutput() dipanggil, maka akan ditampilkan teks "Mencetak gambar...". Ini mencerminkan prinsip dasar OOP, yaitu kontrak melalui interface untuk menjamin konsistensi implementasi.

Pewarisan Interface

Sebuah interface dapat mewarisi satu atau lebih interface lainnya selama tidak ada method dengan nama yang sama.

AYO PAHAMI!


Petunjuk:

  1. Perhatikan kode program PHP yang ditampilkan di kotak sebelah kiri.
  2. Ketik ulang seluruh baris kode tersebut ke dalam editor di sebelah kanan.
  3. Pastikan setiap baris dan struktur penulisan sesuai dengan contoh (termasuk titik koma, kurung, dll).
  4. Tekan tombol RUN di dalam editor untuk menjalankan program.
  5. Perhatikan hasil keluaran di bawah editor. Apa yang ditampilkan?
<?php
interface A {
    public function methodA();
}

interface B {
    public function methodB();
}

interface C extends A, B {
    public function methodC();
}

class MyClass implements C {
    public function methodA() {
        echo "Method A dipanggil";
    }
    
    public function methodB() {
        echo "Method B dipanggil";
    }
    
    public function methodC() {
        echo "Method C dipanggil";
    }
}

// Penggunaan
$obj = new MyClass();
$obj->methodA(); 
$obj->methodB(); 
$obj->methodC(); 
?>

Kode ini menunjukkan bagaimana interface dapat saling diturunkan (inheritance antarmuka) dan kemudian diimplementasikan oleh sebuah class. Interface C mewarisi A dan B, sehingga interface C mewajibkan semua class yang mengimplementasikannya untuk menyediakan implementasi method methodA(), methodB(), dan methodC(). Class MyClass mengimplementasikan interface C, sehingga harus mendefinisikan ketiga method tersebut. Saat objek $obj dibuat dari MyClass dan masing-masing method dipanggil, akan ditampilkan output yang sesuai. Ini menegaskan bahwa PHP mendukung pewarisan interface ganda dan implementasi kontrak secara menyeluruh.

Kita bisa membuat interface untuk kendaraan yang memiliki method start() dan stop().

AYO PAHAMI!


Petunjuk:

  1. Perhatikan kode program PHP yang ditampilkan di kotak sebelah kiri.
  2. Ketik ulang seluruh baris kode tersebut ke dalam editor di sebelah kanan.
  3. Pastikan setiap baris dan struktur penulisan sesuai dengan contoh (termasuk titik koma, kurung, dll).
  4. Tekan tombol RUN di dalam editor untuk menjalankan program.
  5. Perhatikan hasil keluaran di bawah editor. Apa yang ditampilkan?
<?php
interface Kendaraan {
    public function hidupkanMesin();
}

interface KendaraanDarat extends Kendaraan {
    public function jumlahRoda();
}

class Mobil implements KendaraanDarat {
    public function hidupkanMesin() {
        echo "Mesin mobil dihidupkan.";
    }
    
    public function jumlahRoda() {
        return 4;
    }
}

// Penggunaan
$myCar = new Mobil();
$myCar->hidupkanMesin(); 
echo $myCar->jumlahRoda(); 
?>

Kode di atas menunjukkan bagaimana kita bisa menggunakan interface untuk memastikan bahwa semua kendaraan memiliki method hidupkanMesin() dan jumlahRoda(), sehingga memudahkan pengembangan dan pemeliharaan kode dalam skala besar. Interface KendaraanDarat mewarisi Kendaraan, dan class Mobil mengimplementasikan semua kontrak method yang diperlukan.

LATIHAN

Untuk menguji pemahaman kamu tentang konsep interface dan implementasinya dalam PHP,

Isilah bagian yang kosong pada kode berikut ini agar program dapat mencetak jenis output dari file!

<?php
interface Output {
    public function generate();
}

class FileOutput ___ Output {
    public function ___() {
        echo "Output berupa file disimpan.";
    }
}

$printer = new FileOutput();
$printer->___();
?>

Seret potongan kode berikut ke tempat yang kosong:

  • output
  • implements
  • generate