Tutorial Belajar OOP PHP Part 16: Pengertian Object Interface Dalam Pemrograman Berbasis Objek

Setelah dalam tutorial sebelumnya kita mempelajari tentang abstract class dan abstract method, dalam tutorial belajar OOP PHP kali ini kita akan membahas tentang Objek Interface dalam pemrograman berbasis objek. Object Interface ini sangat mirip dengan Abstract class.


Pengertian Object Interface

Secara sederhana, Object Interface adalah sebuah ‘kontrak’ atau perjanjian implementasi method.

Bagi class yang menggunakan object interface, class tersebut harus mengimplementasikan ulang seluruh method yang ada di dalam interface. Dalam pemrograman objek, penyebutan object interface sering disingkan dengan ‘Interface’ saja.

Jika anda telah mempelajari abstract class, maka interface bisa dikatakan sebagai bentuk lain dari abstract class. Walaupun secara konsep teoritis dan tujuan penggunaannya berbeda.

Sama seperti abstract class, interface juga hanya berisi signature dari method, yakni hanya nama method dan parameternya saja (jika ada). Isi dari method akan dibuat ulang di dalam class yang menggunakan interface.

Jika kita menganggap abstract class sebagai ‘kerangka’ atau ‘blue print’ dari class-class lain, maka interface adalah implementasi method yang harus ‘tersedia’ dalam sebuah objek. Interface tidak bisa disebut sebagai ‘kerangka’ class.

Menyambung analogi kita tentang class komputer, interface bisa dicontohkan dengan ‘mouse’, atau ‘keyboard’. Di dalam interface mouse, kita bisa membuat method seperti klik_kiri(), klik_kanan(), dan double_klik(). Jika class laptop ‘menggunakan’ interface mouse, maka class tersebut harus membuat ulang method klik_kiri(), klik_kanan(), dan double_klik().


Cara Membuat Interface dalam PHP

Untuk membuat Interface di dalam PHP, kita menulisnya mirip seperti membuat class, tetapi menggunakan keyword interface, seperti contoh berikut:

<?php
interface mouse
{
   //...isi dari interface mouse
}
?>

Isi dari interface adalah signature method (nama dan parameter method):

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri();
   public function scroll();
   public function double_klik();
}
?>

Untuk menggunakan method kedalam class, kita menggunakan keyword implements, seperti contoh berikut:

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri();
}
 
class laptop implements mouse{
   //... isi dari class laptop
}
 
class pc implements mouse{
   //... isi dari class pc
}
?>

Interface adalah ‘perjanjian method’, dimana jika sebuah class menggunakan interface, maka di dalam class tersebut harus tersedia implementasi dari method tersebut.

Jika di dalam interface mouse terdapat signature method klik_kanan(), maka di dalam class laptop yang menggunakan interface mouse, harus terdapat method klik_kanan(). Berikut contoh kode PHPnya:

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri();
}
 
class laptop implements mouse{
   public function klik_kanan(){
     return "Klik Kanan...";
   }
   public function klik_kiri(){
     return "Klik Kiri...";
   }
}

$laptop_baru = new laptop();
echo $laptop_baru->klik_kanan();
// Klik Kanan...
?>

Apabila kita tidak membuat ulang salah satu method yang ada di interface, PHP akan mengeluarkan error:

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri();
}
 
class laptop implements mouse{
   public function klik_kanan(){
     return "Klik Kanan...";
   }
}
 
$laptop_baru = new laptop();
// Fatal error: Class laptop contains 1 abstract method
// and must therefore be declared abstract
// or implement the remaining methods (mouse::klik_kiri)
?>

Method Interface Harus di set Sebagai Public

Sesuai dengan tujuannya untuk membuat interface/antar muka bagi class, method di dalam perancangan interface harus memiliki hak akses public, atau tidak ditulis sama sekali (dimana PHP akan menganggapnya sebagai public). Jika kita mengubah hak akses method di dalam interface menjadi private atau protected, PHP akan mengeluarkan error:

<?php
interface mouse{
   public function klik_kanan();
   protected function klik_kiri();
}
 
class laptop implements mouse{
   public function klik_kanan(){
     return "Klik Kanan...";
   }
   public function klik_kiri(){
     return "Klik Kiri...";
   }
}
 
$laptop_baru = new laptop();
// Fatal error: Access type for interface
// method mouse::klik_kiri() must be omitted
?>

Di dalam class yang menggunakan interface, method yang berasal dari interface juga harus memiliki hak akses public. Kita tidak bisa mengubahnya menjadi protected atau private.

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri();
}
 
class laptop implements mouse{
   public function klik_kanan(){
     return "Klik Kanan...";
   }
 
   protected function klik_kiri(){
     return "Klik Kiri...";
   }
}
 
$laptop_baru = new laptop();
// Fatal error: Access level to laptop::klik_kiri()
// must be public (as in class mouse)
?>

Dalam contoh diatas, saya mengubah hak akses method klik_kiri() menjadi protected di dalam class laptop. Hal ini akan menghasilkan error.


Interface bisa di Turunkan (Inherit)

Di dalam PHP, interface bisa diturunkan kedalam interface lain. Prosesnya mirip dengan penurunan class, yakni dengan menggunakan kata kunci extends:

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri();
}
 
interface mouse_gaming extends mouse{
   public function ubah_dpi();
}
 
class laptop implements mouse_gaming{
   public function klik_kanan(){
     return "Klik Kanan...";
   }
 
   public function klik_kiri(){
     return "Klik Kiri...";
   }
 
   public function ubah_dpi(){
     return "Ubah settingan DPI mouse";
   }
}
 
$laptop_baru = new laptop();
echo $laptop_baru->ubah_dpi();
// Ubah settingan DPI mouse
?>

Interface Bisa Memiliki Konstanta

Dalam PHP, Interface bisa memiliki konstanta . Berikut adalah contoh penggunaan konstanta di dalam interface:

<?php
interface mouse{
   const JENIS = "Laser Mouse";
   public function klik_kanan();
   public function klik_kiri();
}
 
echo mouse::JENIS;
// Laser Mouse
?>

Untuk mengakses konstanta dari interface, kita menggunakan perintah nama_interface::nama_konstanta.


Interface Tidak Bisa Memiliki Method ‘normal’

Salah satu yang membedakan interface dengan abstract class adalah kita tidak bisa membuat method biasa di dalam Interface. Contoh berikut akan menghasilkan error:

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri(){
     return "Klik Kiri...";
   }
}
 
class laptop implements mouse{
   public function klik_kanan(){
     return "Klik Kanan...";
   }
}
 
$laptop_baru = new laptop();
// Fatal error: Interface function
// mouse::klik_kiri() cannot contain body
?>

Sebuah Class Bisa Menggunakan Banyak Interface

Perbedaan lain antara Interface dengan Abstract Class adalah: Sebuah class bisa menggunakan lebih dari 1 interface, sedangkan untuk abstract class, kita hanya bisa menggunakan 1 abstract class dalam sekali penurunan class.

Untuk menggunakan lebih dari 1 interface, kita tinggal menuliskan semua interface setelah keyword implements. Setiap nama interface dipisahkan dengan tanda koma. Berikut contoh penggunaan 2 buah interface di dalam PHP:

<?php
interface mouse{
   public function klik_kanan();
   public function klik_kiri();
}
 
interface keyboard{
   public function tekan_enter();
}
 
class laptop implements mouse, keyboard{
   public function klik_kanan(){
     return "Klik Kanan...";
   }
 
   public function klik_kiri(){
     return "Klik Kiri...";
   }
 
   public function tekan_enter(){
     return "Tekan Tombol Enter...";
   }
}
 
$laptop_baru = new laptop();
echo $laptop_baru->tekan_enter();
// Tekan Tombol Enter...
?>

Dalam contoh diatas saya membuat dua buah interface, yakni mouse dan keyboard. Kedua interface ini kemudian digunakan oleh class laptop.


Fungsi Interface dalam Pemrograman Objek

Jika anda telah mempelajari abstract class dalam tutorial kita sebelumnya, sedikit banyak kita bisa memahami fungsi interface jika dibandingkan dengan fungsi abstract class. Kedua konsep ini sering membuat bingung karena mirip dalam implementasinya.

Interface lebih berperan untuk menyeragamkan method. Ia tidak masuk kedalam struktur class seperti abstract class. Jika kita menggunakan abstract class komputer sebagai ‘konsep class’ untuk kemudian diturunkan kepada class lain seperti class laptop, class pc, dan class netbook, maka interface hanya ‘penyedia method’. Interface tidak termasuk kedalam pewarisan class.


Object Interface dan Abstract Class merupakan implementasi dari konsep pemrograman objek yang disebut sebagai Polimorfisme. Pengertian Polimorfisme atau polymorphism, akan kita bahas dalam tutorial OOP PHP selanjutnya.


Tutorial Terkait:

18 Comments

  1. yusuf
    29 Oct 14
    • Andre
      31 Oct 14
  2. rozi
    11 Dec 14
    • Andre
      11 Dec 14
  3. Daniel
    08 Jan 15
    • Andre
      09 Jan 15
  4. Dewa
    05 May 15
    • Andre
      06 May 15
  5. aryn
    16 Oct 15
  6. Fauzan azis
    14 Jan 16
  7. Madyan Eka
    26 Jan 16
    • Andre
      26 Jan 16
      • Madyan Eka
        27 Jan 16
  8. Risky Fauziah
    12 May 16
  9. Yahya Rais
    02 Aug 16
  10. Malik
    28 Feb 17
  11. ilham
    02 Aug 17

Add Comment