Sunday, October 31, 2010

Part VI (Belajar Kelas n Objek Php yukkk)

Kelas Dan Objek Di PHP (bagian 2)

   Kini kita akan membahas beberapa hal yang lebih mendalam mengenai kelas dan objek tersebut. Yang akan kita bahas adalah constructor, parent, serta sesuatu yang ditandai dengan karakter titik dua yang ditulis dua kali (::).

Constructor
Constructor adalah sebuah fungsi yang otomatis dipanggil apabila kita membuat sebuah instance baru dari kelas dengan pernyataan new. Ada sedikit perbedaan deklarasi constructor pada PHP 3 dan PHP 4. Perhatikan baik-baik. Pada PHP 3, sebuah fungsi akan menjadi constructor apabila fungsi tersebut mempunyai nama yang sama dengan kelas, sedangkan pada PHP 4 sebuah fungsi akan menjadi constructor apabila fungsi tersebut mempunyai nama yang sama dengan kelas di mana fungsi tersebut dideklarasikan. Untuk lebih jelasnya PCplus akan memberikan kutipan dari PHP manual sebagai berikut:
“Constructors are functions in a class that are automatically called when you create a new instance of a class with new. In PHP 3, a function becomes a constructor when it has the same name as the class. In PHP 4, a function becomes a constructor, when it has the same name as the class it is defined in – the difference is subtle, but crucial.”
Agak sulit memang menerangkan perbedaan tersebut karena PCplus menggunakan PHP 4 dan tidak memiliki PHP 3 sebagai pembanding. Namun contoh-contoh berikut setidaknya bisa memberikan gambaran.
class tes {
function tes() {
echo "

Aku kelas tes

";
}
}

$newtes = new tes;
?>

Pada skrip tersebut hanya terdapat deklarasi kelas tes dan deklarasi objek $newtes. Secara logikan tidak akan ada output apapun yang diberikan pada browser, namun karena pada kelas tes dideklarasikan fungsi dengan nama sama yaitu tes(), maka fungsi tersebut akan menjadi constructor yang otomatis dipanggil apabila ada deklarasi instance baru dari kelas tersebut. Dan karena function tes() berisi echo “

Aku kelas tes

”, maka pada browser akan nampak sebuah output bertuliskan “Aku kelas tes” yang diberi style heading tingkat pertama.
Apa yang terjadi jika kelas tersebut diinherit dan kemudian dideklarasikan instance baru dari inherit tersebut? Perhatikan contoh berikut:

class tes {
function tes() {
echo "

Aku kelas tes

";
}
}

class tes_juga extends tes {
function tes2() {
echo "

Aku kelas tes_juga

";
}
}

$newtes2 = new tes_juga;
?>

Pada contoh kedua ini kelas tes_juga merupakan inherit dari kelas tes. Sesuai dengan aturan constructor di PHP 4, suatu kelas inherit yang tidak memiliki constructor akan mewarisi constructor induknya (bila induknya memiliki constructor). Oleh sebab itu pada saat dideklarasikan instance baru kelas tes_juga, maka constructor kelas tes akan tetap berfungsi. Dan karena kelas tes_juga tidak memiliki constructor, maka hanya hanya constructor kelas tes yang berfungsi.
Namun ternyata hal ini tidak berlaku di PHP 3. Ingat, pengertian constructor di PHP 3 adalah sebuah fungsi yang mempunyai nama yang sama dengan kelas. Dalam hal ini kelas tes_juga tidak memiliki fungsi bernama tes_juga(), sehingga tidak ada constructor.
Sekarang kita kembangkan lagi skrip tadi menjadi sebagai berikut:

class tes {
function tes() {
echo "

Aku kelas tes

";
}

function tes_juga() {
echo "

Aku kelas tes_juga

";
}
}

class tes_juga extends tes {
function tes2() {
echo "

Aku kelas tes_juga

";
}
}

$newtes2 = new tes_juga;
?>

Sekarang, kelas tes memiliki fungsi tes() dan tes_juga(). Jika kelas tes tersebut diinherit oleh kelas tes_juga, apakah fungsi tes_juga() akan menjadi constructor di kelas tes_juga? Ternyata jawabannya adalah YA. Kesimpulannya adalah: jika sebuah kelas menginherit kelas lain dan di dalam kelas lain tersebut terdapat fungsi dengan nama yang sama dengan kelas yang menginherit, maka fungsi tersebut akan menjadi constructor di kelas yang menginheritnya.

Karakter titik dua yang ditulis dua kali (::)
Karakter titik dua yang ditulis dua kali (disebut juga operator ::) berguna untuk memberikan referensi terhadap fungsi di dalam suatu kelas yang belum memiliki suatu instance. Operator :: ini hanya berlaku untuk PHP 4. Berikut adalah contohnya:

class induk {
function cetak() {
echo "

Aku adalah kelas induk

";
}
}

class anak extends induk {
function cetak() {
echo "

Aku adalah kelas anak

";
}
}

induk::cetak();
$turunan = new anak;
$turunan->cetak();
?>

Pada contoh tersebut, kelas induk belum memiliki suatu instance, namun fungsi cetak yang dimilikinya dapat direferensikan dengan menuliskan induk::cetak(). Jika sebuah kelas telah memiliki suatu instance, misalnya dalam hal ini $turunan adalah instance dari kelas anak, maka fungsi yang didalamnya dalam direferensikan dengan menuliskan karakter ->, sehingga penulisannya adalah $turunan->cetak(). 

Parent
Pernyataan parent digunakan untuk merujuk pada kelas lain yang menjadi induk suatu kelas. Hal ini identik dengan $this yang merujuk pada dirinya sendiri, sedangkan parent merujuk pada kelas induknya. Contohnya adalah sebagai berikut:

class induk {
function cetak() {
echo "

Aku adalah kelas induk

";
}
}

class anak extends induk {
function cetak() {
echo "

Aku adalah kelas anak

";
parent::cetak();
}
}

$turunan = new anak;
$turunan->cetak();
?>

Perhatikan bahwa fungsi cetak() pada kelas anak akan melakukan shadow terhadap fungsi cetak() di kelas induk (baca lagi PCplus minggu lalu tentang masalah shadow ini). Namun sekalipun di-shadow, fungsi cetak di kelas induk tetap dapat dipanggil. Pada contoh ini, fungsi cetak di kelas anak memanggil fungsi cetak di kelas induknya dengan pernyataan parent, dan karena kelas induk tidak memiliki instance di dalam kelas anak, maka pemanggilannya menggunakan operator ::. 
Selamat belajar.

No comments:

Post a Comment