Page Nav

HIDE

Grid

GRID_STYLE

Breaking News

latest

Object Oriented Programming (OOP) di PHP

OOP atau Object Oriented Programming, dalam Bahasa Indonesia diterjemahkan sebagai Pemrograman Berorientasi Objek. Boleh dikatakan hampir ...


OOP atau Object Oriented Programming, dalam Bahasa Indonesia diterjemahkan sebagai Pemrograman Berorientasi Objek. Boleh dikatakan hampir semua bahasa pemrograman modern memiliki sifat orientasi objek ini. Suatu bahasa pemrograman dikatakan murni bersifat object oriented apabila setidaknya memenuhi unsur-unsur inheritance, polymorphism, dan encapsulation. Demikian pula dengan PHP yang boleh dikatakan juga memenuhi ketiga unsur tersebut, sekalipun bisa jadi tidak semua programmer setuju. Kita tidak perlu memperdebatkan hal tersebut, yang pasti sekarang kita akan mempelajari kelas dan objek di PHP.
 
Kelas dan objek memang merupakan sesuatu yang agak sulit didefinisikan, tetapi untuk membantu membayangkannya dapat dipakai ilustrasi berikut:
 
Misalnya sebuah kelas dibayangkan sebagai sebuah perabotan, sementara itu meja, kursi, sofa, lemari dapat dibayangkan sebagai objek-objeknya. Jadi setiap dibicarakan sebuah sedan, sedan tersebut tidak dapat terlepas dari kelasnya yaitu sebuah mobil yang memiliki mesin, roda, kemudi, tempat duduk, dan lain-lain. Dari sudut pandang yang sebaliknya dapat dikatakan bahwa jika sebuah kelas mobil didefinisikan, maka dapat didefinisikan pula sebuah objek sedan atau minibus atau jeep yang memiliki seluruh sifat dari mobil.

Kelas (class)
Kelas adalah sebuah kumpulan variabel dan fungsi-fungsi yang bekerja dengan variabel tersebut. Untuk mendefinisikan kelas, sintaks yang digunakan adalah sebagai berikut:
class namakelas {
    var $namavariabel;
    ...Kumpulan fungsi...
}
Sebagai batasan, namakelas tidak boleh menggunakan nama stdClass karena telah digunakan oleh Zend Engine, yaitu "mesin" yang merupakan motor penggerak PHP.
 
Di dalam kelas, variabel didefinisikan dengan pernyataan var. Di dalam sebuah kelas secara default dikenal sebuah variabel bernama $this yang mereferensikan kelas itu sendiri. Kemudian untuk merujuk kepada variabel yang didefinisikan dengan pernyataan var digunakan tanda ->.
 
Untuk lebih jelasnya berikut contoh dari sebuah kelas yang berisi fungsi-fungsi perhitungan sederhana:
<?php
class hitung {
    var $hasil;
  
    function kali($x,$y) {
        $this->hasil = $x * $y;
    }

    function bagi($x,$y) {
        $this->hasil = $x / $y;
    }

    function tambah($x,$y) {
        $this->hasil = $x + $y;
    }

    function kurang($x,$y) {
        $this->hasil = $x - $y;
    }
}
?>
Sebuah kelas dapat merupakan perluasan dari kelas yang ada sebelumnya. Misalnya pada contoh kelas di atas fungsi-fungsi yang ada hanyalah kali(), bagi(), tambah(), kurang() dan mungkin itu dirasakan kurang. Jika ingin didefinisikan sebuah kelas lain yang juga mengandung fungsi-fungsi kali(), bagi(), tambah(), dan kurang() serta ditambah sebuah fungsi lagi misalnya pangkat(), maka tidak perlu dibuat sebuah kelas yang baru sama sekali yang mengandung kelima fungsi tersebut. Kelas tersebut dapat merupakan perluasan dari kelas hitung dan hanya mendefinisikan sebuah fungsi baru yaitu pangkat(). Dalam PHP untuk melakukan perluasan terhadap sebuah kelas digunakan pernyataan extends.
class namakelas extends kelaslain {
    var $namavariabel;
    ...Kumpulan fungsi lain...
}

Contoh:
<?php
class hitung_juga extends hitung {
    function pangkat($x,$y) {
        $this->hasil = pow($x,$y)
    }
}
?>
Dari contoh ini dapat disimpulkan bahwa kelas hitung_juga akan memiliki variabel dan fungsi-fungsi yang terdapat pada kelas hitung ditambah dengan sebuah fungsi baru yaitu pangkat().
 
Perluasan kelas semacam ini dapat dikategorikan sebagai sifat inheritance dari pemrograman berorientasi objek. Kelas hitung_juga pada contoh di atas merupakan inherit dari kelas hitung.
 
Dalam melakukan perluasan ini, kelas yang merupakan inherit dari kelas lain dapat mendefinisikan fungsi dengan nama yang sama. Contoh:
class A {
    function contoh() {
        echo "Aku adalah fungsi contoh yang asli";
    }
}
class B extends A {
    function contoh() {
        echo "Aku adalah fungsi contoh yang didefinisikan ulang";
    }
}
Dalam hal ini fungsi contoh() di kelas A disebut dengan shadowed dan tidak dapat dipergunakan lagi. Unsur polymorphism terpenuhi di sini.

Objek (object)
Menurut ilustrasi perabotan di atas dapat dikatakan bahwa objek "diperanakan" dari kelas. Untuk mendefinisikan sebuah objek digunakan sintaks sebagai berikut:
$namaobjek = new namakelas;
Setelah objek didefinisikan, maka seluruh variabel dan fungsi yang terdapat dalam sebuah kelas namakelas otomatis terdapat pula dalam objek namaobjek tersebut. Untuk merujuk pada fungsi atau variabel yang dimiliki oleh kelasnya, maka digunakan juga tanda ->. Berikut akan diberikan contoh bagaimana menggunakan objek dan kelas dengan menggunakan contoh kelas hitung dan hitung_juga yang telah diberikan di atas.
 
<HTML>
<HEAD>
<TITLE> Object Oriented Programming (bagian 1)  </TITLE>
</HEAD>
<BODY>
<?php
class hitung {
    var $hasil;
  
    function kali($x,$y) {
        $this->hasil = $x * $y;
    }

    function bagi($x,$y) {
        $this->hasil = $x / $y;
    }

    function tambah($x,$y) {
        $this->hasil = $x + $y;
    }

    function kurang($x,$y) {
        $this->hasil = $x - $y;
    }
}
$a = 5;
$b = 2;
echo "Nilai \$a = $a <br />";
echo "Nilai \$b = $b <br />";
$calc = new hitung;

echo "\$a kali \$b sama dengan ";
$calc->kali($a,$b);
print $calc->hasil;
echo "<br />";

echo "\$a bagi \$b sama dengan ";
$calc->bagi($a,$b);
print $calc->hasil;
echo "<br />";

echo "\$a tambah \$b sama dengan ";
$calc->tambah($a,$b);
print $calc->hasil;
echo "<br />";

echo "\$a kurang \$b sama dengan ";
$calc->kurang($a,$b);
print $calc->hasil;
echo "<br /><br />";

class hitung_juga extends hitung {
    function pangkat($x,$y) {
        $this->hasil = pow($x,$y);
    }
}

$calc_juga = new hitung_juga;

echo "\$a kali \$b sama dengan ";
$calc_juga->kali($a,$b);
print $calc_juga->hasil;
echo "<br />";

echo "\$a bagi \$b sama dengan ";
$calc_juga->bagi($a,$b);
print $calc_juga->hasil;
echo "<br />";

echo "\$a tambah \$b sama dengan ";
$calc_juga->tambah($a,$b);
print $calc_juga->hasil;
echo "<br />";

echo "\$a kurang \$b sama dengan ";
$calc_juga->kurang($a,$b);
print $calc_juga->hasil;
echo "<br />";

echo "\$a pangkat \$b sama dengan ";
$calc_juga->pangkat($a,$b);
print $calc_juga->hasil;
echo "<br />";
?>
</BODY>
</HTML>
 
Demikian pembahasan OOP di PHP (bagian 1), artikel selanjutnya kita akan belajar lebih jauh lagi mengenai OOP, selamat belajar & berlatih.
-----

Pada artikel sebelumnya telah dibahas 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.
Agak sulit memang menerangkan perbedaan tersebut karena PHP 3 sudah mulai ditinggalkan dan digantikan dengan PHP 4 dan 5. Namun contoh-contoh berikut setidaknya bisa memberikan gambaran.
<HTML>
<HEAD>
<TITLE> Constructors </TITLE>
</HEAD>
<BODY>
<?php
class coba {
    function coba() {
        echo "<h1> Aku adalah kelas coba </h1>";
    }
}
$hasil = new coba;
?>
</BODY>
</HTML>
Pada skrip tersebut hanya terdapat deklarasi kelas coba dan deklarasi objek $hasil. Secara logika tidak akan ada output apapun yang diberikan pada browser, namun karena pada kelas coba dideklarasikan fungsi dengan nama sama yaitu coba(), maka fungsi tersebut akan menjadi constructor yang otomatis dipanggil apabila ada deklarasi instance baru dari kelas tersebut. Dan karena function coba() berisi echo “<h1> Aku adalah kelas coba </h1>”, maka pada browser akan nampak sebuah output bertuliskan “Aku kelas coba” yang diberi style heading tingkat pertama.
Apa yang terjadi jika kelas tersebut diinherit dan kemudian dideklarasikan instance baru dari inherit tersebut?
Contoh:
<HTML>
<HEAD>
<TITLE> Constructors</TITLE>
</HEAD>
<BODY>
<?
class coba {
    function coba() {
        echo "<h1> Aku adalah kelas coba </h1>";
    }
}

class coba_lagi extends coba {
    function coba2() {
        echo "<h1> Aku adalah kelas coba_lagi </h1>";
    }
}
$hasil = new coba_lagi;
?>
</BODY>
</HTML>

Pada contoh kedua ini kelas coba_lagi merupakan inherit dari kelas coba. 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 coba_lagi, maka constructor kelas coba akan tetap berfungsi. Dan karena kelas coba_lagi tidak memiliki constructor, maka hanya hanya constructor kelas coba yang berfungsi, sehingga output yang diberikan oleh contoh skrip kedua ini akan sama.
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 coba_juga tidak memiliki fungsi bernama coba_juga(), sehingga tidak ada constructor.
Sekarang kita kembangkan lagi skrip tadi menjadi berikut:
<HTML>
<HEAD>
<TITLE> Constructors</TITLE>
</HEAD>
<BODY>
<?php
class coba {
    function coba() {
        echo "<h1> Aku adalah kelas coba </h1>";
    }

    function coba_juga() {
        echo "<h1> Aku kelas coba_juga </h1>";
    }
  
}
class coba_juga extends coba {
    function coba2() {
        echo "<h1> Aku  adalah kelas coba_juga </h1>";
    }
}
$hasil = new coba_juga;
?>
</BODY>
</HTML>
Sekarang, kelas coba memiliki fungsi coba() dan coba_juga(). Jika kelas coba tersebut diinherit oleh kelas coba_juga, apakah fungsi coba_juga() akan menjadi constructor di kelas coba_juga? Ternyata jawabannya adalah ya.
Output yang dihasilkan oleh browser adalah “Aku adalah kelas coba_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 dan 5. Berikut adalah contohnya:

<HTML>
<HEAD>
<TITLE> Operator :: </TITLE>
</HEAD>
<BODY>
<?php
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().

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.
Contoh:
<HTML>
<HEAD>
<TITLE> Parent </TITLE>
</HEAD>
<BODY>
<?php
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. 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 diatas dapat anda coba sendiri untuk menampilkan hasilnya :-D, pelajaran dasar yang di dapat di bangku kuliah. Selamat belajar.

Sumber

2 komentar

  1. mantabbb sharenya gan... ane baru mau belajar gan. tamnahin ilmunya dong gan

    BalasHapus
  2. makasih mas untuk sharenya.. kebetulan ane lagi belajar oop di PHP, kayaknya OOP lebih asik dibandingakan dengan prosedural. hhhe

    BalasHapus