Saya ingin sedikit berbagi pengenalan konsep dasar class, object, dan properties pada PHP 5.

In PHP 5 there is a new Object Model. PHP’s handling of objects has been completely rewritten, allowing for better performance and more features.

Dari keterangan diatas dapat dijelaskan bahwa object PHP5 memuat pemodelan object yang baru dan dukungan object yang lebih lengkap untuk mengatasi berbagai macam kompleksitas, dan PHP5 memberikan performa dan fitur yang lebih baik dibandingkan pada versi sebelumnya.

Sebenarnya PHP4 sudah mempunyai dukungan cukup untuk object, hanya saja, PHP4 dan PHP5 ada perbedaan dalam handling object. Menurut saya, PHP5 lebih ke arah Java saat assigning object. Penggunaan class, penciptaan object, inisialisasi variable yang dipanggil oleh object, serta penggunaan fungsi dan pemanggilannya dengan object di PHP5, “nyaris sama” dengan Java. Hanya saja pada PHP5 cenderung lebih luwes, diantaranya nama file-nya sendiri tidak harus sama dengan nama class.

Class

Setiap pendefinisian kelas (class) dimulai dengan nama kelas itu sendiri, penamaannya bisa apa saja, asal tidak menggunakan nama predefined-variable PHP yang sudah ada.

Sebuah kelas dengan nama jenisMakanan sudah berhasil kita buat, tetapi belum dapat dilakukan apa-apa pada kelas tersebut, karena kita belum menambahkan properti (properties) atau metode (methods) didalamnya.

Nah, sekarang kita sudah menaruh sebuah fungsi ringan() pada kelas makanan. Fungsi pada kelas disebut juga metode (method). Kelas tersebut belum dapat digunakan, karena kita belum mendeklarasikan sebuah instance pada kelas tersebut. Untuk dapat menggunakan kelas tersebut, beserta metode dan properti-nya, maka harus dibuatkan instance dari kelas tersebut menggunakan perintah ‘new ‘. Dengan mendeklarasikan sebuah instance, maka kita dapat menciptakan sebuah obyek (object).

ringan(); // Hasil: krupuk udang

?>

Object

Seperti pada contoh diatas, digunakan “new” untuk menciptakan sebuah instance dari kelas jenisMakanan dan ditetapkan (assigned) pada variabel $makanan, kemudian memanggil metode ringan() dengan obyek $makanan.

Yang perlu diperhatikan adalah perbedaan antara kelas dengan obyek. Kelas, pada contoh diatas adalah jenisMakanan(), dan $makanan adalah sebuah obyek (object). Kelas hanya bisa dibuat satu saja, semisal dibuat dua kelas dengan nama yang sama, yaitu jenisMakanan, maka akan terjadi kesalahan (error). Walaupun begitu, kita dapat membuat beberapa instance menggunakan satu kelas yang sama.

ringan(); // Hasil: krupuk udang

$makanan2 = new jenisMakanan();
$makanan2->ringan(); // Hasil: krupuk udang

?>

Dari contoh diatas dapat kita lihat terdapat dua instance yang dibuat dari kelas jenisMakanan dimana kita mempunyai 2 obyek, $makanan dan $makanan2. Masing-masing instance memanggil metode ringan().

Properties

Sebuah kelas dapat memiliki variabel-variabel yang disebut properti (properties) atau bisa disebut juga attributes. Tipe-tipe properti tersebut adalah public, private, dan protected.

rasa;
}
}

$makanan = new jenisMakanan();
$makanan->rasa = “enak sekali”;
$makanan->ringan(); // Hasil: krupuk udang enak sekali

?>

Pada contoh diatas, kita telah menambahkan sebuah baris, yaitu “public $rasa;“, yang disebut juga access modifiers. Maksudnya adalah kita telah menambahkan sebuah properti public dengan nama $rasa pada kelas yang telah kita buat sebelumnya. Pada metode ringan() juga sudah ditambahkan properti $rasa, dimana variable dari properti $rasa akan ikut ditampilkan. Dapat anda lihat, digunakan $this->rasa untuk memanggil properti $rasa.

Pseudo-variable, $this, adalah sebuah variable yang sudah tersedia ketika suatu metode dipanggil oleh sebuah obyek. $this adalah sebuah acuan yang dapat digunakan untuk memanggil sebuah metode atau properti pada sebuah kelas.

public;
// Hasil: Public

echo $object->protected;
// Fatal error: Cannot access protected property MyClass::$protected

echo $object->private;
// Fatal error: Cannot access private property MyClass::$private

$object->helloWorld();
// Hasil: Public, Protected, dan Private

?>

Pada contoh diatas dijelaskan bahwa.

* Properti public dapat di akses dari dalam kelas itu sendiri maupun dari luar kelas. Public adalah properti bebas yang dapat diakses darimana saja.
* Properti protected dapat di akses dari dalam kelas itu sendiri, tetapi tidak dapat diakses dari luar kelas. Protected dapat di akses pada kelas itu sendiri (parent class) maupun dari kelas lain (inherited class) yang berasal/pewarisan dari kelas tersebut (parent class). Hal ini dapat dilakukan dengan inheritance yang dijelaskan pada bagian akhir tulisan ini.
* Properti private dapat di akses dari dalam kelas itu sendiri, tetapi tidak dapat diakses dari luar kelas maupun dari kelas lain.

Seperti halnya properti, kontrol terhadap metode/fungsi dalam kelas dapat dilakukan menggunakan access modifiers.

MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}

$object = new MyClass();
$object->MyPublic(); // Dapat berjalan dengan baik
$object->MyProtected(); // Terjadi kesalahan (error)
$object->MyPrivate(); // Terjadi kesalahan (error)
$object->Foo(); // MyPublic, MyProtected, MyPrivate berjalan baik.

?>

Inheritance

Salah satu kelebihan menggunakan sebuah kelas yaitu kita dapat membuat kelas inherits. Pewarisan (inheritance) dilakukan dengan memperpanjang (extends) kelas yang sudah ada dengan cara membuat kelas baru yang mewarisi (inherits) semua properti dan metode yang ada pada kelas aslinya (parent class).

public . ” ” . $this->protected;
}

function rasa2()
{
echo $this->public . ” ” . $this->private;
}
}

$makanan = new rasaMakanan();
$makanan->rasa1(); // Hasil: krupuk udang enak sekali
$makanan->rasa2(); // Hasil: krupuk udang

?>

Pada contoh diatas, terlihat jelas bahwa properti public dan protected dapat ditampilkan dengan memanggil obyek yang ada pada kelas inherits, yaitu kelas rasaMakanan. Sedangkan properti private tidak dapat ditampilkan pada kelas inherits tersebut. Perlakuan access modifiers pada metode-metode yang ada pada kelas tersebut sama perlakuannya terhadap properti-properti seperti yang sudah dijelaskan.

Leave a Reply

You must be logged in to post a comment.