Senin, 16 Juli 2012

Object Oriented Programming (OOP) pada PHP


Seperti layaknya Java, dalam PHP kita juga dapat membuat fungsi-fungsi dalam suatu kelas yang dapat dipanggil ulang. Dengan cara penulisan seperti itu program yang dibuat akan menjadi lebih ringkas dan melalui fungsi yang ada kita dapat menjaga konstrain data agar tetap valid.

Kelas dan Objek

Untuk lebih memahami OOP sebelumnya kita perjelas apa itu Kelas dan Objek. Kelas adalah
sekumpulan fungsi (metode) dan property (variabel) yang telah terorganisasi secara baik dan dapat digunakan berulang-ulang. Sedangkan objek adalah bentuk/hasil dari instansiasi kelas. Jadi untuk dapat menggunakan fungsi dan property dari kelas kita perlu menjadikannya sebuah objek.

Membuat Kelas

Dalam PHP untuk membuat sebuah kelas menggunakan kata kunci class yang kemudian diikuti nama kelasnya. Kemudian dalam class body (dalam tanda kurung kurawal) kita isi dengan property dan fungsi-fungsinya.
<?
     class Barang{
<definisi kelas>
}
?>

Encapsulation

Enkapsulasi adalah sebuah tindakan yang dilakukan untuk menjaga nilai dari property kelas agar tidak dapat secara langsung diakses dari luar. Cara melakukan enkapsulasi itu adalah dengan memberi modifier access private ($nama, $harga) pada setiap property dalam kelas tersebut. Dengan begitu maka untuk dapat mengakses/mengubah nilai dari property sebuah kelas harus melalui metode yang ada (setNama($nama)).
<?
class Barang{
private $nama;
private $harga;

function setNama($nama){
     $this->nama = $nama;
}
}
?>

Membuat Objek

Seperti yang dijelaskan sebelumnya, objek merupakan hasil instansiasi dari suatu kelas. Dalam PHP pembuatan objek tersebut dilakukan dengan cara menulis tag :
<variable> = new <kelas>. 
<?
include "kelas.php";
$b = new Barang();
?>

Anggota Kelas dan Scope

Anggota Kelas adalah menunjuk pada property dan metode suatu kelas. Sedangkan Scope adalah deklarasi atau batasan yang menentukan dari mana suatu anggota dapat diakses.
Public
Merupakan scope default untuk semua property dan metode dalam suatu kelas. Dengan public anggota kelas tersebut dapat diakses dari script manapun.
Private
Scope private ini berarti anggota itu hanya bisa diakses dalam kelas tersebut. Tanpa bisa dari luar ataupun turunannya.
Protected
Scope ini sama dengan private, bedanya anggota tersebut dapat juga diakses oleh kelas turunannya.

Metode Ajaib

Yang disebut metode ajaib adalah metode-metode khusus yang secara langsung dapat berjalan secara otomatis. Metode tersebut adalah :
konstruktor
konstruktor adalah pembangun. Yaitu metode yang akan berjalan ketika kelas tersebut d-instansiasi (new). Untuk menambahkan konstruktor tersebut dapat ditulis dengan cara membuat fungsi : __construct().
Destruktor
Seperti layaknya konstruktor, destruktor ini adalah kebalikan dari konstruktor. Destruktor berjalan ketika objek yang dibuat tersebut dibebaskan (release) yaitu ketika objek tersebut di unset (variable diberi nilai null). Tag-nya ditulis dengan cara : __destruct().
Metode Getter
Metode ini adalah metode yang dijalankan secara otomatis ketika adanya usaha pembacaan variabel yang tidak dikenal (tidak ada) atau variabel private. Metode ini memiliki 1 parameter, yaitu nama variabel yang dicari.
Metode Setter
Metode ini adalah metode yang dijalankan secara otomatis ketika adanya usaha pengisian nilai ke variabel yang tidak dikenal (tidak ada) atau variabel private. Metode ini memiliki 2 parameter, yaitu nama dan nilai dari variabel yang dicari.
<?   class Barang{
private $nama;
private $harga;

function __construct(){
     $this->harga = 0;
}

function __destruct(){
     unset($this->nama);
     unset($this->harga);
}

function setNama($nama){
     $this->nama = $nama;
}

function getNama(){
     return "<B>$this->nama</B>";
}

function setHarga($harga){
     if ($harga > 0)
     $this->harga = $harga;
}

function getHarga(){
     return "<B>Rp. $this->harga</B>";
}

function __get($var){
     echo "Variabel $var Tidak Dikenal";
}

function __set($var,$nil){
     echo "Variabel $var Tidak Dikenal";
     echo "Nilai $nil Tidak Diproses";
}
}
?>

Inheritance

Inheritance atau pewarisan adalah pembuatan kelas turunan dari sebuah kelas (superclass/parent dan subclass/child).caranya adalah dengan menggunakan tag extends.
<?
include "kelas.php";
class Box extends Barang{
<definisi kelas>
}
?>

Polymorphism

Polymorfisme adalah fitur yang paling penting dalam OOP. Dengan polymorfisme kita dapat mempersingkat kode program. Dengan metode inheritance kita dapat membuat kelas yang merupakan turunan dari kelas yang lain. Kita dapat menggunakan metode dari kelas induk ataupun dapat juga menggembangkannya dengan mudah.
<?   include "kelas.php";
class Kulkas extends Box{
private $ukuran;

function setUkuran($ukuran){
     if ($ukuran > 0)
     $this-> ukuran = $ ukuran;
}

function getUkuranKulkas(){
     return "<B>$this->ukuran Inch</B>";
}

}
?>

Variabel Anggota Static

Dalam pembuatan objek suatu kelas, kita dapat mempunyai variabel yang nilainya berbeda-beda untuk tiap objek yang dibuat dari kelas yang sama. Tetapi sebuah kelas dapat mempunyai variabel yang nilainya dapat dipakai bersama oleh semua objek hasil instansiasinya. Variabel itu disebut variabel statis atau sering juga disebut variabel kelas. 
<?   class daftar{
     private static $banyak = 0;
     private $nama;

function __construct($nama){
     self::$banyak++;
          $this->nama = $nama;
}

function tampil(){
     echo "Jumlah Pendaftar : ".self::$banyak;
           echo "<BR>Nama Anda : $this->nama";
}
}
?>

Metode Anggota Static

Seperti variabel statis, kelas juga dapat memiliki metode statis. Yaitu metode yang dapat dipakai oleh semua objek. Metode ini adalah metode yang dimiliki oleh kelas, jadi untuk menggunakan cukup dengan menggunakan nama kelas dan metodenya tanpa perlu meng-instansiasi kelas tersebut dahulu. Karenanya untuk mengakses anggota dari metode statis tidak bisa menggunakan kata kunci this->metode(), melaikan harus dengan self::<metode>.
<?
     class konversi{
           static function hari($ke){
                $days = array("Senin","Selasa","Rabu",
                     "Kamis","Jumat","Sabtu","Minggu");
                if ($ke<8 AND $ke>0)
                     $hari = $days[$ke-1];
                else
                     $hari = "Input Salah";
                return "$hari";
           }
     }
?>

Menyalin Objek

Dalam peng-instansiasi-an sebuah kelas, dilakukan pembuatan objek dengan suatu lokasi memori tertentu. Dalam beberapa hal perlu dilakukan penduplikatan objek tertentu. Untuk melakukannya kita dapat menggunakan perintah <$obj2> = clone <$obj1>. Maka akan dibuatkan objek kedua yang isinya sama dengan objek pertama.

Kelas parent:: dan self::

Kelas parent:: dalam PHP digunakan untuk menyebut super kelas dari sebuat kelas turunan. Fungsi ini digunakan untuk memudahkan OOP. Fungsi ini biasa digunakan dalam pemanggilan konstruktor atau metode milik super kelas.
Sedangkan self:: adalah seperti yang dijelaskan diatas, fungsi ini digunakan untuk menyebut kelas dalam penggunaan anggota kelas statis.

Operator Instanceof

Operator ini adalah sama dengan is_a() dalam OOP lain. Fungsinya adalah untuk mengetahui apakah suatu kelas adalah turunan dari kelas yang disebutkan.
<?
function tampil($objek){
if($objek instanceof Kulkas){
     $u = getUkuranKulkas();
}else{
     echo "Objek gak Dikenal";
}
return "$u";
}
?>

Metode dan Kelas Abstrak

Fungsi dari metode dan kelas abstrak adalah dalam pembuatan keseragaman antara sub kelas dari kelas abstrak. Kelas abstrak tidak dapat di-instansiasi melaikan untuk di-extends (penurunan). Dengan adanya metode abstrak ini maka kita harus meng-override metode abstraknya itu untuk dapat menjadi turunan dari kelas tersebut. Dengan begitu akan ada semacam standarisasi untuk turunan dari kelas tersebut.

Interface

Interface adalah kumpulan dari metode-metode yang semuanya abstrak. Bisa dikatakan hampir sama dengan kelas abstrak. Dalam hal ini interface memiliki konstanta tapi bukan variabel dan metode tanpa implementasi, jadi fungsinya adalah agar kelas yang meng-implementasi-nya melakukan override atas semua metodenya. Hubungannya dengan kelas peng-implementasi-nya adalah implements. Jadi interface difungsikan sebagai penghubung lingkungan luar dengan sebuah kelas.
<?
interface aku{
     function job();
}

class aktor implements aku(){
function job(){
     echo "aku adalah aktor";
}
}
?>

Metode Final

Metode final adalah metode yang tidak dapat di-override oleh kelas turunannya.

Fungsi __autoload()

Fungsi ini adalah fungsi yang akan dijalankan otomatis untuk meng-include-kan kelas yang diperlukan. Jadi kita tidak perlu menulis include semua nama kelas yang dibutuhkan, namun cukup menyebutkan letak kelas-kelas disimpan dan ketika dibutuhkan fungsi ini akan menggunakannya.
<?
function __autuload($kelas){
     require_once      $_SERVER["DOCUMENT_ROOT"]."/kelas/$kelas.php";
}
?>

2 komentar:

  1. A very tutorial explained by you. At the time of my study I have the classes of Java. Now object oriented progamming is too much famous. I want to know more about it. Please share some more blogs or tutorials regarding this which help me a lot.Thanks.
    digital signature software

    BalasHapus