Saturday, November 29, 2014

Tutorial PHP OOP Part 14 : Menggunakan Interface dan Implements

Interface yang saya maksud disini adalah sebutan singkat saya untuk Object Interface. Interface merupakan istilah untuk konsep yang akan diimplementasi pada class. interface mengijinkan kita membuat method yang harus diimplementasi pada class tanpa harus mendefinisikan bagaimana isi dari method tersebut.

Sekilas Interface memang mirip dengan class abstrak, namun prinsip dan penerapannya berbeda karena Interface memang bukan sebuah class. Interface lebih bertujuan membuat konsep method yang seragam dari pada membuat kerangka class seperti class abstrak.

Membuat Interface

Untuk membuat interface kita menggunakan keyword "interface", diikuti dengan nama interface kemudian sepasang kurung kurawal {} yang berisi konsep-konsep method yang akan diimplementasi nantinya.
<?php  
 interface namaInterface  
 {  
   public function namaMethod(); 
   ... 
 }  
?>  
Contoh membuat interface untuk class Rumus:
<?php  
 interface konsepRumus  
 {  
   public function luas_persegi();  
   public function luas_segitiga();  
   public function luas_lingkaran();  
 }  
?>  

Mengimplementasi Interface

Untuk mengimplementasi interface pada class, kita menggunakan keyword "implements" dibelakang nama class.
<?php  
 class namaClass implements namaInterface  
 {  
   public function namaMethod() {
   ...
   }  
 }  
?>  
jika sebuah class mengimplementasi interface, maka pada class tersebut harus mengimplementasi semua method yang ada pada interface.
Contoh :
<?php  
 <?php   
 interface konsepRumus {   
   public function luas_persegi();  
   public function luas_segitiga();   
   public function luas_lingkaran();   
 }   

 class Rumus implements konsepRumus {  
   public function luas_persegi() {  
           return "ini luas persegi";  
   }  

   public function luas_segitiga() {  
           return "ini luas segitiga";  
   }  

   public function luas_lingkaran() {  
           return "ini luas lingkaran";  
   }  
 }  

 $rumus = new Rumus;  
 echo $rumus->luas_persegi()."<br/>";  
 echo $rumus->luas_segitiga()."<br/>";  
 echo $rumus->luas_lingkaran()."<br/>";  
 ?>   

Hal-hal yang perlu diperhatikan dalam menggunakan Interface dan Implements

Dalam menggunakan interface dan implements ada beberapa aturan dan kondisi yang harus kita patuhi, diantaranya :

1. Nama class tidak boleh sama dengan nama interface

Hal ini karena PHP mendeteksi interface sebagai class, meskipun pada kenyataannya hanya berupa konsep saja. Jika nama class dan interface sama maka akan muncul error "Fatal error: Cannot redeclare class", artinya ada pendeklarasian class kembali.
 <?php   
 interface Rumus {   
   public function luas_persegi();  
 }   

 class Rumus implements Rumus {  
   public function luas_persegi() {  
           return "ini luas persegi";  
   }  
 }  
 ?>   
Jika script diatas dijalankan maka akan tampil error berikut ini :

Fatal error: Cannot redeclare class Rumus in /home/sabrina/www/php/index.php on line 8

2. Method pada interface harus diset public

Karena sifatnya yang terbuka dan harus diimplementasi maka semua method pada interface harus diset public atau tidak ditulis sama sekali (sama juga berarti public). Jika diset private atau protected akan muncul error "Fatal error: Access type for interface method".
 <?php   
 interface Rumus {   
   private function luas_persegi();  
 }   

 class Rumus implements Rumus {  
   public function luas_persegi() {  
           return "ini luas persegi";  
   }  
 }  
 ?>   
Jika script diatas dijalankan maka akan tampil error berikut ini :

Fatal error: Access type for interface method konsepRumus::luas_persegi() must be omitted in /home/sabrina/www/php/index.php on line 3

3. Interface tidak boleh memiliki method normal

Sebagaimana fungsi interface yang bertujuan membuat konsep bukan class, maka pada interface tidak boleh ada method normal. Hal inilah salah satu yang membedakan antara interface dan class abstrak.
Jika hal ini terjadi akan muncul error "Fatal error: Interface function cannot contain body ".
 <?php   
 interface Rumus {   
   private function luas_persegi();  
   public function luas_segitiga() {
  return "ini luas segitiga";
   } 
 }   

 class Rumus implements Rumus {  
   public function luas_persegi() {  
           return "ini luas persegi";  
   }  
 }  
 ?>   
Jika script diatas dijalankan maka akan tampil error berikut ini :

Fatal error: Interface function konsepRumus::luas_segitiga() cannot contain body in /home/sabrina/www/php/index.php on line 6

4. Interface bisa diturunkan

Seperti halnya class, interface juga bisa diturunkan. Untuk membuat interface turunan kita juga menggunakan keyword extends seperti pada class.
 <?php   
 interface konsepRumus {   
   public function luas_persegi();  
 }   

 interface konsepRumusBangunDatar extends konsepRumus{   
   public function keliling_persegi();  
 }   

 class Rumus implements konsepRumusBangunDatar {  
   public function luas_persegi() {  
           return "ini luas persegi";  
   }  

   public function keliling_persegi() {  
        return "ini keliling persegi";  
   }  
 }  
 $rumus = new Rumus;  
 echo $rumus->luas_persegi()."<br/>";  
 ?>   

5. Interface bisa memiliki konstanta

Interface juga bisa memiliki konstanta seperti class. Untuk mengakses konstanta pada interface sama dengan mengakses konstanta pada umumnya yaitu menggunakan operator :: (titik dua ditulis dobel).
 <?php   
 interface konsepRumus {   
   const pi=3.14;  
   public function luas_persegi();  
 }   
 echo konsepRumus::pi."<br/>";  
 ?>   

6. Sebuah class bisa mengimplementasi banyak interface sekaligus

Jika pada abstrak berlaku satu class abstrak untuk satu class, maka pada interface tidak. Kita bisa mengimplementasi beberapa interface sekaligus dalam satu class.
 <?php   
 interface konsepRumus1 {   
   public function luas_persegi();  
 }   
 interface konsepRumus2 {   
   public function luas_segitiga();  
 }   
 class rumus implements konsepRumus1,konsepRumus2 {  
   public function luas_persegi() {   
       return "ini luas persegi";   
   }   
   public function luas_segitiga() {   
       return "ini luas segitiga";   
   }    
 }  
 ?> 
Referensi :

2 komentar:

  1. Luar biasa,
    terimakasih chain materi dg subject OOP nya.

    izin saya gunakan sebagai referensi

    ReplyDelete
    Replies
    1. Sama-sama. Semoga bermanfaat.
      Trima kasih kunjungannya.

      Delete