Blogger Anak Babagan

Ds. Babagan RT 01 RW 03

Jumat, 26 Februari 2016

Tutorial PHP OOP Part 15 : Mengenal Metode Re-use Trait

Tutorial PHP OOP Part 15 : Mengenal Metode Re-use Trait

 


Trait adalah fitur baru pada PHP 5.4. Dengan trait kita dimungkinkan untuk menggunakan ulang sebuah kode (re-use). Dalam hasa indonesia, trait berarti sifat. Pengertian trait adalah sebuah mekanisme penggunakan ulang kode dalam sebuah class. Trait berbeda dengan pewarisan class, class abstrak atau object interface. Sebuah trait lebih mirip sebagai penggunaan kode bersama dari pada penurunan class, kerangka class abstrak ataupun implementasi sebuah interface.

Munculnya trait dimaksudkan untuk mempermudah dalam hal penggunaan ulang sebuah kode tanpa adanya batasan hirarki atau kerangka. Sebuah Trait dimaksudkan untuk mengurangi beberapa keterbatasan warisan tunggal dengan memungkinkan pengembang untuk menggunakan kembali secara bebas satu set method di beberapa kelas independen yang tinggal di hierarki kelas yang berbeda.

Membuat Trait

Untuk membuat trait kita menggunakan keyword "trait" diikuti dengan nama trait dan sepasang kurung kurawal untuk menaruh isi trait. Didalam trait kita bisa menaruh satu set method dengan lengkap dengan isinya, juga bisa kerangka method seperti class abstrak. Selain itu kita juga bisa menaruh static dan properti didalam trait.
  1. trait namaTrait {     
  2.   public function namaMethod() {    
  3.     ... //isi method    
  4.   }   
  5.   abstract public function namaMethod2();      
  6. }     

Menggunakan Trait

Untuk menggunakan trait kita menggunakan keyword "use" didalam class. Kita bisa menggunakan trait dengan bebas pada setiap class. Kita bisa menggunakan beberapa trait sekaligus dalam satu class.
  1. class namaClass {    
  2.       use namaTrait;    
  3.  }    

Contoh Penggunaan Trait

  1. <?php     
  2. trait daftarRumus {     
  3.   public function luas_persegi(){    
  4.   return "ini luas persegi";    
  5.   }    
  6. }     
  7.   
  8. class Rumus {    
  9.      use daftarRumus;    
  10. }    
  11.   
  12. $rumus = new Rumus();    
  13. echo $rumus->luas_persegi();    
  14. ?>    
Pada program diatas kita mempunyai sebuah trait bernama daftarRumus dan sebuah class Rumus yang menggunakan trait tersebut. Jika program diatas dijalankan akan menampilkan "ini luas persegi", yaitu balikan dari method luas_persegi() dalam trait daftarRumus.

Referensi :

Tutorial PHP OOP Part 14 : Menggunakan Interface dan Implements

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.
  1. <?php    
  2.  interface namaInterface    
  3.  {    
  4.    public function namaMethod();   
  5.    ...   
  6.  }    
  7. ?>    
Contoh membuat interface untuk class Rumus:
  1. <?php    
  2.  interface konsepRumus    
  3.  {    
  4.    public function luas_persegi();    
  5.    public function luas_segitiga();    
  6.    public function luas_lingkaran();    
  7.  }    
  8. ?>    

Mengimplementasi Interface

Untuk mengimplementasi interface pada class, kita menggunakan keyword "implements" dibelakang nama class.
  1. <?php    
  2.  class namaClass implements namaInterface    
  3.  {    
  4.    public function namaMethod() {  
  5.    ...  
  6.    }    
  7.  }    
  8. ?>    
jika sebuah class mengimplementasi interface, maka pada class tersebut harus mengimplementasi semua method yang ada pada interface.
Contoh :
  1. <?php    
  2.  <?php     
  3.  interface konsepRumus {     
  4.    public function luas_persegi();    
  5.    public function luas_segitiga();     
  6.    public function luas_lingkaran();     
  7.  }     
  8.   
  9.  class Rumus implements konsepRumus {    
  10.    public function luas_persegi() {    
  11.            return "ini luas persegi";    
  12.    }    
  13.   
  14.    public function luas_segitiga() {    
  15.            return "ini luas segitiga";    
  16.    }    
  17.   
  18.    public function luas_lingkaran() {    
  19.            return "ini luas lingkaran";    
  20.    }    
  21.  }    
  22.   
  23.  $rumus = new Rumus;    
  24.  echo $rumus->luas_persegi()."<br/>";    
  25.  echo $rumus->luas_segitiga()."<br/>";    
  26.  echo $rumus->luas_lingkaran()."<br/>";    
  27.  ?>     

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.
  1. <?php     
  2. interface Rumus {     
  3.   public function luas_persegi();    
  4. }     
  5.   
  6. class Rumus implements Rumus {    
  7.   public function luas_persegi() {    
  8.           return "ini luas persegi";    
  9.   }    
  10. }    
  11. ?>     
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".
  1. <?php     
  2. interface Rumus {     
  3.   private function luas_persegi();    
  4. }     
  5.   
  6. class Rumus implements Rumus {    
  7.   public function luas_persegi() {    
  8.           return "ini luas persegi";    
  9.   }    
  10. }    
  11. ?>     
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 ".
  1. <?php     
  2. interface Rumus {     
  3.   private function luas_persegi();    
  4.   public function luas_segitiga() {  
  5.  return "ini luas segitiga";  
  6.   }   
  7. }     
  8.   
  9. class Rumus implements Rumus {    
  10.   public function luas_persegi() {    
  11.           return "ini luas persegi";    
  12.   }    
  13. }    
  14. ?>     
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.
  1. <?php     
  2. interface konsepRumus {     
  3.   public function luas_persegi();    
  4. }     
  5.   
  6. interface konsepRumusBangunDatar extends konsepRumus{     
  7.   public function keliling_persegi();    
  8. }     
  9.   
  10. class Rumus implements konsepRumusBangunDatar {    
  11.   public function luas_persegi() {    
  12.           return "ini luas persegi";    
  13.   }    
  14.   
  15.   public function keliling_persegi() {    
  16.        return "ini keliling persegi";    
  17.   }    
  18. }    
  19. $rumus = new Rumus;    
  20. echo $rumus->luas_persegi()."<br/>";    
  21. ?>     

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).
  1. <?php     
  2. interface konsepRumus {     
  3.   const pi=3.14;    
  4.   public function luas_persegi();    
  5. }     
  6. echo konsepRumus::pi."<br/>";    
  7. ?>     

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.
  1. <?php     
  2. interface konsepRumus1 {     
  3.   public function luas_persegi();    
  4. }     
  5. interface konsepRumus2 {     
  6.   public function luas_segitiga();    
  7. }     
  8. class rumus implements konsepRumus1,konsepRumus2 {    
  9.   public function luas_persegi() {     
  10.       return "ini luas persegi";     
  11.   }     
  12.   public function luas_segitiga() {     
  13.       return "ini luas segitiga";     
  14.   }      
  15. }    
  16. ?>   
Referensi :

Tutorial PHP OOP Part 13 : Pengertian Class Abstrak

Tutorial PHP OOP Part 13 : Pengertian Class Abstrak

 


Pada PHP 5 kita mengenal class abstrak dan method abstrak. Class abstrak (abstract class) didefinisikan sebagai class yang tidak bisa diinstantisasi menjadi object. Sebuah class abstrak setidaknya memiliki satu method abstrak (abstract method). Untuk menggunakan sebuah class abstrak, kita harus membuat class turunan dari class abstrak tersebut.

Tujuan dari dibuat abstrak class adalah agar setiap class turunan menggunakan method abstrak pada class induk secara fleksibel. Jadi pada method abstrak di class induk hanya terdapat signature saja tanpa isi yang konkrit.

Membuat Class Abstrak

Untuk membuat class abstrak, kita menggunakan keyword "abstract" didepan keyword class. Sebuah class abstrak harus memiliki setidaknya satu method abstrak. Namun class abstrak juga bisa memiliki properti dan method normal layaknya class konkrit.
  1. abstract class AbstractClass {  
  2.     ....//harus berisi setidaknya satu method abstrak  
  3. }  

Membuat Method Abstrak

Untuk membuat method abstrak, kita menggunakan keyword "abstract" didepan keyword function. Jika didefinisikan hak akses-nya seperti public, private dan protected maka kita menempatkan keyword abstract tadi didepan hak akses, misal abstract public function namaFunction().
  1. abstract class AbstractClass  {    
  2.   // membuat method abstrak didalam class abstrak    
  3.   abstract protected function abstractMethod();    
  4. }    
Yang unik dalam membuat method abstrak ini adalah kita tidak perlu membuat isi method, karena memang method ini abstrak alias tidak nyata. Kita baru akan mengisi method nanti didalam class turunan. Jadi kita hanya bisa membuat method abstrak ini didalam class induk saja.

Penggunaan Class Abstrak dan Method Abstrak

Dalam penggunaan class abstrak dan method abstrak, kita harus memperhatikan beberapa hal penting yang jika tidak dipenuhi akan berakibat error dan program tidak jalan. Hal-hal tersebut diantaranya adalah sebagai berikut :

1. Class Abstrak tidak bisa diinstatisasi

Sebuah class abstrak tidak bisa langsung diinstantisasi menjadi object. Class Abstrak hanya bisa diinstantisasi menjadi object melalui class turunan. Jadi class sbstrak hanya merupakan bluprint dari class turunan.

Contoh berikut ini akan menghasilkoan error " Fatal error: Cannot instantiate abstract class" jika dieksekusi :
  1. <?php    
  2.  abstract class Rumus {    
  3.    abstract public function luas_lingkaran();    
  4.  }    
  5.  $rumus=new Rumus();    
  6. ?>    

2. Class turunan harus mengimplementasi semua method abstrak pada class induk.

Ketika kita membuat class turunan dari class induk yang abstrak, maka kita harus mengimplementasi semua method abstrak yang ada pada class tersebut. Jika ada satu saja method abstrak yang tidak diimplementasi akan muncul error.

Contoh berikut ini akan menghasilkan error " Fatal error: Class ... contains 1 abstract method and must therefore be declared abstract or implement the remaining methods " jika dieksekusi :
  1. <?php    
  2.  abstract class Rumus {    
  3.    abstract public function luas_lingkaran();    
  4.    abstract public function luas_persegi();    
  5.  }    
  6.    
  7. class Luas extends Rumus {    
  8.       public function luas_lingkaran() {    
  9.         return "Ini method luas lingkaran";    
  10.       }    
  11.  }    
  12.   
  13.  $luas=new Luas();    
  14.  echo $luas->luas_lingkaran();    
  15. ?>    

3. Class abstrak bisa memiliki properti, method dan static

Dalam class abstrak kita bisa membuat properti, method dan static seperti layaknya class konkrit. Untuk lebih jelas perhatikan contoh berikut ini :
  1. <?php    
  2.  abstract class Rumus {    
  3.    var $diameter;    
  4.   
  5.    public function jari () {    
  6.      return $this->diameter / 2;    
  7.    }    
  8.   
  9.    public static $pi=3.14;    
  10.   
  11.    abstract public function luas_lingkaran();    
  12.  }    
  13.   
  14.  class Luas extends Rumus {    
  15.       public function luas_lingkaran() {    
  16.         return parent::$pi * $this->jari() * $this->jari();    
  17.       }    
  18.  }    
  19.   
  20.  $luas=new Luas();    
  21.  $luas->diameter = 10;    
  22.  echo "Luas Lingkaran dengan diameter ".$luas->diameter." = ".$luas->luas_lingkaran();    
  23. ?>    
Pada script diatas terdapat sebuah class abstrak Rumus yang memiliki sebuah method abstrak luas_lingkaran() tanpa isi. Kemudian class abstrak Rumus juga properti $diameter, sebuah method jari() dan sebuah static $pi.

Selanjutnya class abstrak dicetak pada class turunan Luas dan method abstraknya diimplementasi pada class tersebut sehingga syarat pada item no.2 diatas telah terpenuhi. Pada method luas_lingkaran() di class turunan kita mengakses static $pi dan method jari() pada class induk untuk menghitung luas lingkaran.

Dan untuk melihat hasilnya kita instantisasi class Luas menjadi object, kemudian kita set nilai diameternya=10 dan kita tampilkan hasil perhitungan dari method luas_lingkaran().

Jika benar maka script diatas akan menghasilkan tampilan :

Luas Lingkaran dengan diameter 10 = 78.5

Referensi :

Tutorial PHP OOP Part 12 : Apa itu Static, Parent dan Self ?

Tutorial PHP OOP Part 12 : Apa itu Static, Parent dan Self ?

 


Static, Parent dan Self adalah keyword pada PHP OOP yang merupakan perintah dalam membuat dan menangani sebuah static properti atau static method didalam class. Keyword "static" dipakai saat membuat static properti atau static method sedangkan keyword "parent" dan "self" dipakai untuk mengakses properti atau method tersebut didalam class dan class turunannya.

Keuntungan dari membuat static properti dan static method adalah kita bisa mengaksesnya tanpa membuat instantisasi object. Hal ini telah dibahas pada tulisan sebelumnya tentang operator Scope Resolution (::) .

Membuat Static Properti dan Static Method

Untuk membuat static properti dan static method kita menggunakan keyword "static". Kita juga bisa menggunakan teknik enkapsulasi seperti public, private dan protected dalam membuat static properti dan static method.

Membuat Static Properti

  1. class Classname {  
  2.     public static $var = Value;  
  3. }  

Membuat Static Method

  1. class Classname {  
  2.     public static function aStaticMethod() {  
  3.         // ...  
  4.     }  
  5. }  

Contoh Membuat Static Properti dan Static Method

  1. <?php    
  2. class Sekolah    
  3. {    
  4.   public static $namaSekolah = 'SMPN 1 WELAHAN';    
  5.   
  6.   public static function showSekolah() {    
  7.     return self::$namaSekolah;    
  8.   }    
  9. }    
  10.   
  11. ?>    

Mengakses Static Properti dan Static Method

Dalam mengakses  static properti dan static method kita menggunakan operator scope resolution (::). Kita bisa mengakses  static properti dan static method didalam dan diluar class. Untuk mengakses dari luar class kita gunakan nama class, operator :: dan nama static, contoh : MyClass::CONSTANT.

Dan untuk mengakses  static properti dan static method didalam class kita gunakan keyword "self". Untuk mengakses  static properti dan static method pada class induk (diakses dari class turunan) kita gunakan keyword "parent". Dengan demikian kita tidak perlu menggunakan variabel $this saat akan mengakses static properti dan static method didalam class.

Mengakses Static Properti dan Static Method pada class (Induk)

  1. <?php    
  2. class Sekolah  {    
  3.   public static $namaSekolah = 'SMPN 1 WELAHAN';    
  4.   
  5.   public function showSekolah() {    
  6.     return self::$namaSekolah;    
  7.   }    
  8. }    
  9.   
  10. //mengakses static properti secara langsung    
  11. print Sekolah::$namaSekolah . "<br/>";    
  12.   
  13. //mengakses static properti dengan static method    
  14. print Sekolah::showSekolah() . "<br/>";    
  15. ?>    

Mengakses Static Properti dan Static Method pada class turunan

  1. <?php    
  2. class Sekolah    
  3. {    
  4.   public static $namaSekolah = 'SMPN 1 WELAHAN';    
  5.   
  6.   public static function showSekolah() {    
  7.     return self::$namaSekolah;    
  8.   }    
  9. }    
  10.   
  11. class Siswa extends Sekolah    
  12. {    
  13.   public static $namaSiswa = 'SABRINA';    
  14.   
  15.   public static function showSiswa() {    
  16.     return self::$namaSiswa ." dari ".parent::$namaSekolah;    
  17.   }    
  18. }    
  19.   
  20. //mengakses static properti class induk secara langsung    
  21. print Sekolah::$namaSekolah . "<br/>";    
  22.   
  23. //mengakses static properti class induk dengan method    
  24. print Sekolah::showSekolah() . "<br/>";    
  25.   
  26. //mengakses static properti class anak secara langsung    
  27. print Siswa::$namaSiswa . "<br/>";    
  28.   
  29. //mengakses static properti class induk dan class anak dengan method    
  30. print Siswa::showSiswa() . "<br/>";    
  31. ?>    
Pada program diatas kita membuat dua cuah class, yaitu class Sekolah (class induk) dan class Siswa yang merupakan turunan dari class Sekolah.

Pada class Sekolah terdapat sebuah static properti $namaSekolah dan static method showSekolah(). Pada method showSekolah terlihat kita mengakses static properti $namaSekolah dengan keyword self.

Pada class Siswa yang merupakan turunan dari class Sekolah, sebuah static properti $namaSiswa dan static method showSiswa(). Pada method showSiswa ini terlihat kita mengakses dua buah static properti yaitu $namaSekolah dan $namaSiswa.

Karena  berada pada class induk maka kita mengakses Statis properti $namaSekolah dengan keyword parent. Sementara untuk mengakses static properti $namaSiswa kita menggunakan keyword self.

Jika script diatas dijalankan akan tampil seperti ini :

SMPN 1 WELAHAN
SMPN 1 WELAHAN
SABRINA
SABRINA dari SMPN 1 WELAHAN

Referensi :

Tutorial PHP OOP Part 11 : Mengenal Operator Scope Resolution (::)

Tutorial PHP OOP Part 11 : Mengenal Operator Scope Resolution (::)

 


Operator scope resolution (::) atau dalam bahasa indonesia berarti operator resolusi ruang lingkup adalah operator yang membuat kita diijinkan untuk mengakses static, konstanta, properti dan method pada sebuah class. Operator ini juga disebut dengan Paamayim Nekudotayim. Dengan operator (::) kita bisa mengakses secara langsung sesuatu tanpa instantisasi object. Kita pernah membahas operator ini pada tulisan konstanta pada class.

Ketika kita mereference item ini dari luar definisi class, kita harus menggunakan nama class. Mulai pada PHP 5.3.0 dimungkinkan mereferen class menggunakan variabel. Yang penting nilai variabel tidak boleh berupa keyword, seperti self, parent dan static.

Untuk lebih jelas perhatikan cara menggunakan operator :: berikut ini :

1. Menggunakan operator :: dari luar class

  1. <?php    
  2. //membuat class  
  3. class MyClass {    
  4.   const KONSTANTA = 'Nilai Konstan';    
  5. }    
  6.   
  7. //memanggil konstanta pada class tanpa instantisasi object    
  8. echo MyClass::KONSTANTA."<br/>";    
  9.   
  10. //menggunakan variabel dalam mereferen class    
  11. $classname = 'MyClass';    
  12. echo $classname::KONSTANTA; // As of PHP 5.3.0    
  13. ?>    

2. Menggunakan operator :: dari dalam class

Ada tiga keyword khusus yang bisa dipakai dalam menggunakan operator :: didalam class, yaitu : static, parent dan self.
  1. <?php    
  2. class MyClass {    
  3.   const KONSTANTA = 'Nilai Konstan';    
  4. }    
  5.   
  6. //membuat class anak turunan dari MyClass  
  7. class Anak extends MyClass    
  8. {    
  9.     public static $my_static = 'Variabel Static';    
  10.     public static function doubleColon() {    
  11.   
  12.     echo parent::KONSTANTA . "<br/>";    
  13.     echo self::$my_static . "<br/>";    
  14.   }    
  15. }    
  16.   
  17. //memanggil method pada class tanpa instantisasi object    
  18. //dengan mereferen dari variabel    
  19. $classname = 'Anak';    
  20. echo $classname::doubleColon(); // As of PHP 5.3.0    
  21.   
  22. //memanggil method pada class tanpa instantisasi object    
  23. Anak::doubleColon();    
  24. ?>    

3. Memanggil method pada parent class (class induk)

Ketika class turunan menimpa method yang ada pada class induk (parent class) maka PHP tidak akan memanggil method pada class induk. Jadi bergantung pada class turunan mau menggunakan method pada class induk atau tidak. Cara ini juga dipakai pada Constructors,  Destructors, Overloading, dan definisi Magic method.
  1. <?php    
  2. class MyClass    
  3. {    
  4.   protected function myFunc() {    
  5.     echo "MyClass::myFunc()<br/>";    
  6.   }    
  7. }    
  8.   
  9. class Anak extends MyClass    
  10. {    
  11.   // Membuat function yang menimpa function pada induk    
  12.   public function myFunc()    
  13.   {    
  14.     // tapi masih bisa mengakses method dari class induk    
  15.     parent::myFunc();    
  16.   
  17.     echo "Anak::myFunc()<br/>";    
  18.   }    
  19. }    
  20.   
  21. $class = new Anak();    
  22. $class->myFunc();    
  23. ?>    
Pada contoh terdapat class induk MyClass yang mempunyai method myFunc dengan perintah menampilkan "MyClass::myFunc()" untuk menandai bahwa tampilan ni dihasilkan oleh method myFunc() pada class induk.

Kemudian kita membuat class turunan bernama Anak dan membuat method bernama myFunc() juga, sama dengan method pada class induk. Kemudian pada method tersebut kita membuat dua perintah, yaitu { parent::myFunc(); } untuk mengakses method myFunc() pada class induk dan { echo "Anak::myFunc()<br/>"; } untuk menampilkan tulisan "Anak::myFunc()".

Referensi :

Tutorial PHP OOP Part 10 : Membuat Autoloading Class

Tutorial PHP OOP Part 10 : Membuat Autoloading Class

 


Autoloading class adalah sebuah cara untuk memanggil sebuah class pada file lain tanpa menggunakan fungsi include. Seperti telah dijelaskan sebelumnya bahwa kita sebaiknya membuat class pada file tersendiri, yang selanjutnya ini kita sebut dengan modul.

Dengan membuat class pada file terpisah, kita tidak harus mengulang menulis sebuah class yang sama, namun cukup menyertakannya saja. Nah, autoloading class ini membuat cara menyertakan class menjadi lebih ringkas tanpa harus menuliskan perintah include.

Alasan lain adalah saat ini kebanyakan developer menulis dan menyimpan class sesuai dengan definisinya masing-masing. Masalah yang kemudian terjadi adalah banyaknya include yang harus ditulis diawal sebuah file, jika hanya satu atau dua file tidak apa, lha bagaimana jika file yang diinclude berjumlah puluhan, hal ini tentu menjadi akan sangat tidak efisien.

Membuat Autoloading Class

Kita bisa membuat autoloadng class dengan function __autoload(). Tanda __ adalah underscore (_) yang ditulis dua kali seperti pada function __construct(). Fungsi ini otomatis akan memanggil class saat kita akan menggunakannya, meskipun belum didefinisikan sebelumnya.

  1. function __autoload($class_name) {  
  2.     include $class_name . '.php';  
  3. }  

Ada beberapa aturan yang memudahkan kita dalam menggunakan autoloading class, yaitu :
  1. Kita buat satu class satu file modul.
  2. Nama file modul harus sama dengan nama class, termasuk memperhatikan huruf besar dan kecilnya.
  3. File modul berada pada folder yang sama dengan file php. Jika berada pada folder lain harus sertakan path yang lengkap.
  4. fungsi __autoloading harus ada pada file php.

Contoh membuat autoloading class :

1. Buat class Rumus1 lalu simpan dengan nama Rumus2.php
  1. <?php    
  2. class Rumus1 {    
  3.   var $panjang;     
  4.   var $lebar;     
  5.   
  6.   function luas() {    
  7.        return $this->panjang * $this->lebar;    
  8.   }    
  9.   
  10.   function __construct($x,$y) {     
  11.    $this->panjang = $x;     
  12.    $this->lebar = $y;     
  13.   }      
  14. }    
  15. ?>    
2. Buat class Rumus2 lalu simpan dengan nama Rumus2.php
  1. <?php    
  2. class Rumus2 {    
  3.   var $diameter;     
  4.   
  5.   function luas() {    
  6.        $r = $this->diameter /2;    
  7.        return 3.14 * $r * $r;    
  8.   }    
  9.   
  10.   function __construct($x) {     
  11.    $this->diameter = $x;     
  12.   }      
  13. }    
  14. ?>    
3. Buat file php yang menggunakan dua class tadi
  1. <?php    
  2. function __autoload($class_name) {    
  3.   include $class_name . '.php';    
  4. }    
  5.   
  6. $rumus1 = new Rumus1(5,8);    
  7. $rumus2 = new Rumus2(8);    
  8.   
  9. echo "Luas Rumus1 = ".$rumus1->luas()."<br/>";    
  10. echo "Luas Rumus2 = ".$rumus2->luas();    
  11. ?>    
4. Pastikan ketiga file berada pada folder yang sama.

5. Jalankan file, jika benar akan tampil seperti ini :

Luas Rumus1 = 40
Luas Rumus2 = 50.24

Referensi :  

Tutorial PHP OOP Part 9 : Menaruh Class dalam Modul

Tutorial PHP OOP Part 9 : Menaruh Class dalam Modul

 


Agar lebih efisien dalam pemrograman, kita bisa menaruh class didalam sebuah file tersendiri lalu meng-include file tersebut dalam setiap file PHP. Dengan demikian kita tidak perlu menulis ulang class dalam setiap file dan jika ada kesalahan atau modifikasi pada class, kita cukup merubah class dalam satu file tersebut.

Dalam pemrograman, teknik ini dinamakan teknik modularitas. Dimana file class yang dibuat terpisah dan bisa dipakai oleh beberapa file tadi disebut dengan modul. Kata modul mengadopsi istilah yang berarti bagian atau part dari sebuah alat atau perangkat. Langkah-langkah membuat modul dan proses include-nya sama dengan teknik include PHP dasar.

Berikut ini langkah-langkah menaruh class dalam modul :

1. Buat class dalam sebuah file lalu simpan dengan nama class.php

  1. <?php    
  2. class Rumus {    
  3.   var $panjang;     
  4.   var $lebar;     
  5.   
  6.   function luas() {    
  7.        return $this->panjang * $this->lebar;    
  8.   }    
  9.   
  10.   function __construct($x,$y) {     
  11.    $this->panjang = $x;     
  12.    $this->lebar = $y;     
  13.   }      
  14. }    
  15. ?>    

2. Buat file index.php pada folder yang sama, lalu include file class.php tadi dalam file index.php yang baru dibuat

  1. <?php    
  2. include "class.php";    
  3.   
  4. $rumus = new Rumus(5,8);    
  5. echo "Luas = ".$rumus->luas();    
  6. ?>    

3. Coba jalankan file index.php, jika benar akan tampil seperti ini :

Luas = 40

Selanjutnya dengan teknik modularitas ini kita bisa membuat auto loading class, yaitu memanggil file class secara otomatis saat membuat object dari sebuah class tanpa harus di- include file-nya. Untuk mempelajari fitur auto loading class lebih lanjut insyaAllah akan ditulis pada artikel selanjutnya.

Referensi :

Tutorial PHP OOP Part 8 : Membuat Constructor dan Destructor

Tutorial PHP OOP Part 8 : Membuat Constructor dan Destructor

 


Contructor adalah method didalam class yang digunakan untuk melakukan setting properti saat instantisasi object. Constructor membuat pemrograman menjadi lebih efisien karena proses instantisasi object dan setting properti dilakukan secara bersamaan. Constructor dipanggil setiap membuat object baru dari class.

Sedangkan Destructor adalah method didalam class yang digunakan untuk unset semua data yang mereferen terhadap object yang dibuat dari class. Namun tidak seperti Constructor, Destructor sangat jarang digunakan pada pemrograman PHP berorientasi object.

Membuat Constructor

Untuk membuat Constructor sebuah class kita menggunakan method __constructor(parameter) yang merupakan fungsi bawaan PHP. Tanda "__" merupakan tanda underscore (_) yang ditulis dua kali tanpa spasi. Kemudian nama-nama properti yang ingin disetting nilainya dengan nilai dari parameter ditaruh diantara dua kurung kurawal {} seperti saat membuat method.

Salah satu format sederhana membuat constructor didalam sebuah class

  1. <?php class namaClass {     
  2.   var $properti1;    
  3.   var $properti2;    
  4.   ...dst    
  5.   
  6.   function __construct($parameter1,$parameter2,...dst) {    
  7.     $this->properti1 = $parameter1;    
  8.     $this->properti2 = $parameter2;    
  9.      ...dst    
  10.   }    
  11.  }    
  12. ?>    

Contoh membuat constructor untuk properti panjang dan lebar pada class Rumus

  1. class Rumus {     
  2.   var $panjang;    
  3.   var $lebar;    
  4.   
  5.   //membuat constructor  
  6.   function __construct($x,$y) {    
  7.     $this->panjang = $x;    
  8.     $this->lebar = $y;    
  9.   }   
  10.   
  11.   //membuat method untuk menghitung luas  
  12.   function luas() {    
  13.        $hasil = $this->panjang * $this->lebar;    
  14.        return $hasil;    
  15.   }    
  16. }    
Pada contoh diatas kita membuat constructor untuk class Rumus terhadap dua properti, yaitu panjang dan lebar. Pada function __construct dipakai dua variabel bantu $x dan $y untuk mengarahkan nilai dari constructor kedalam nilai properti panjang dan lebar

Membuat lebih dari satu Constructor

Pada sebuah class, kita bisa membuat banyak constructor. Constructor-constructor ini harus berbeda satu sama lain dan mempunyai parameter yang berbeda-beda.

Contoh membuat dua constructor dalam satu class

  1. class Rumus {     
  2.   var $panjang;    
  3.   var $lebar;    
  4.   
  5.   //membuat constructor  
  6.   function __construct($x,$y) {    
  7.     $this->panjang = $x;    
  8.     $this->lebar = $y;    
  9.   }   
  10.   
  11.   //membuat constructor  
  12.   function __construct($x) {    
  13.     $this->panjang = $x;    
  14.   }   
  15.   
  16.   //membuat method untuk menghitung luas  
  17.   function luas() {    
  18.        $hasil = $this->panjang * $this->lebar;    
  19.        return $hasil;    
  20.   }    
  21. }    

Menggunakan Constructor

Constructor digunakan saat proses instantisasi object. Jadi kita harus menyertakan parameter constructor saat membuat object. Parameter constructor pada object ini harus sama dengan constructor yang dibuat pada class.

Contoh penggunaan constructor

  1.    
  2. //instantisasi object beserta constructor-nya  
  3.  $rumus = new Rumus(5,8);    
  4.   
  5.  //menampilkan hasil dari method luas  
  6.  echo "Luas = ".$rumus->luas();    

Membuat dan Menggunakan Destructor

Destructor adalah kebalikan dari constructor. Jika pada constructor kita mengeset nilai dari sebuah properti, maka pada destructor kita menghapus nilai dari sebuah properti. Untuk membuat destructor kita menggunakan function __destruct() bawaan PHP.

Contoh membuat dan menggunakan destructor

  1. <?php    
  2. class Rumus {    
  3.   var $panjang;     
  4.   var $lebar;     
  5.   
  6.  //membuat constructor    
  7.   function __construct($x,$y) {     
  8.    $this->panjang = $x;     
  9.    $this->lebar = $y;     
  10.   }     
  11.   
  12.   function __destruct() {    
  13.     print "Menghapus Nilai Properti";    
  14.   }    
  15. }    
  16.   
  17. $obj = new Rumus(5,5);    
  18. unset($obj);  
  19. ?>    
Contoh diatas jika dijalankan akan menampilkan teks "Menghapus Nilai Properti". Hal ini karena pada class terdapat sebuah destructor yang dijalankan.

Referensi :