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.
< ?php
class jenisMakanan
{
// properties
// methods
}
?>
|
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.
< ?php
class jenisMakanan
{
function ringan()
{
echo "krupuk udang";
}
}
?>
|
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).
< ?php
class jenisMakanan
{
function ringan()
{
echo "krupuk udang";
}
}
$makanan = new jenisMakanan();
$makanan->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
$makananadalah
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.
< ?php
class jenisMakanan
{
function ringan()
{
echo "krupuk udang";
}
}
$makanan = new jenisMakanan();
$makanan->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,
$makanandan
$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.
< ?php
class jenisMakanan
{
public $rasa;
function ringan()
{
echo "krupuk udang" . " " . $this->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.
< ?php
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function helloWorld()
{
echo $public;
echo $protected;
echo $private;
}
}
$object = new MyClass();
echo $object->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.
< ?php
class MyClass
{
public function MyPublic()
{
// Kode disini.
}
protected function MyProtected()
{
// Kode disini.
}
private function MyPrivate()
{
// Kode disini.
}
function Foo()
{
$this->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).
< ?php
// parent class
class jenisMakanan
{
public $public = "krupuk udang";
protected $protected = "enak sekali";
private $private = "tidak enak";
// metode/fungsi disini
}
// inherits class
class rasaMakanan extends jenisMakanan
{
function rasa1()
{
echo $this->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.
Author: Andy Pradhana (pradhana\at\netzone.web.id)