Anda di halaman 1dari 4

Kelas Dan Objek Di PHP (bagian 2 – habis)

Minggu lalu Anda telah belajar dasar pengertian serta penggunaan kelas dan objek. 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.

<HTML>
<HEAD>
<TITLE> Constructors </TITLE>
</HEAD>

<BODY>
<?
class tes {
function tes() {
echo "<H1> Aku kelas tes </H1>";
}
}

$newtes = new tes;


?>
</BODY>
</HTML>

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 “<H1> Aku kelas tes </H1>”, maka pada browser akan nampak sebuah output
bertuliskan “Aku kelas tes” yang diberi style heading tingkat pertama. Bandingkan dengan gambar 1.
Apa yang terjadi jika kelas tersebut diinherit dan kemudian dideklarasikan instance baru dari
inherit tersebut? Perhatikan contoh berikut:

<HTML>
<HEAD>
<TITLE> Constructors</TITLE>
</HEAD>

<BODY>
<?
class tes {
function tes() {
echo "<H1> Aku kelas tes </H1>";
}
}

class tes_juga extends tes {


function tes2() {
echo "<H1> Aku kelas tes_juga </H1>";
}
}

$newtes2 = new tes_juga;


?>
</BODY>
</HTML>

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, sehingga output yang
diberikan oleh contoh skrip kedua ini akan sama dengan gambar 1.
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:

<HTML>
<HEAD>
<TITLE> Constructors</TITLE>
</HEAD>

<BODY>
<?
class tes {
function tes() {
echo "<H1> Aku kelas tes </H1>";
}

function tes_juga() {
echo "<H1> Aku kelas tes_juga </H1>";
}

class tes_juga extends tes {


function tes2() {
echo "<H1> Aku kelas tes_juga </H1>";
}
}

$newtes2 = new tes_juga;


?>
</BODY>
</HTML>

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. Buktinya ada pada gambar 2, output yang dihasilkan oleh browser adalah “Aku
adalah kelas tes_juga”. 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:

<HTML>
<HEAD>
<TITLE> Operator :: </TITLE>
</HEAD>

<BODY>
<?
class induk {
function cetak() {
echo "<H1> Aku adalah kelas induk </H1>";
}
}

class anak extends induk {


function cetak() {
echo "<H1> Aku adalah kelas anak </H1>";
}
}

induk::cetak();
$turunan = new anak;
$turunan->cetak();
?>
</BODY>
</HTML>

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(). Hasil dari eksekusi skrip tersebut ditunjukkan oleh gambar 3.

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:

<HTML>
<HEAD>
<TITLE> Parent </TITLE>
</HEAD>

<BODY>
<?
class induk {
function cetak() {
echo "<H1> Aku adalah kelas induk </H1>";
}
}

class anak extends induk {


function cetak() {
echo "<H1> Aku adalah kelas anak </H1>";
parent::cetak();
}
}

$turunan = new anak;


$turunan->cetak();
?>
</BODY>
</HTML>

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 ::. Hasil dari
eksekusi skrip tersebut ditunjukkan oleh gambar 4.
Selamat belajar.