Memahami Konsep OOP pada PHP Bagian 1

Beberapa teman yang mempelajari konsep OOP gagal memahaminya dan menganggap itu sangat susah. Mendengar keluh kesah dari teman ini, saya akhirnya terdorong untuk menulis penjelasan mengenai konsep OOP. Lagi pula, kalau anda seorang programmer yang tidak menguasai OOP, saya khawatir anda tidak akan bisa bertahan hidup dalam dunia persilatan pemrograman modern.

Sebenarnya apa sih OOP itu? OOP adalah singkatan dari Object-Oriented Programming. Kalau dibahasa Indonesiakan artinya Pemrograman Berorientasi Object atau disingkat PBO. Jadi OOP lebih banyak berkutat ke tipe data object. Pengetahuan tentang tipe data object sangat penting dipelajari di masa kini, karena ini adalah tipe data modern yang sering dipakai untuk membuat game dan aplikasi web kompleks. Kalau ditelisik lebih dalam lagi, anda akan kaget bahwa saat ini OOP sudah merasuk ke semua bahasa pemrograman. Main di Javascript bertemu object, main di C# juga bertemu object, apalagi kalau di Java. Object ini seingat saya pertama kali dikenalkan di Java. PHP juga saat ini lagi massifnya mengembangkan dukungan terhadap konsep OOP ini. Jadi saya rasa, anda perlu untuk mempelajarinya.

Cara mudah untuk memahami konsep OOP adalah membandingkannya dengan array. Dalam OOP kita akan banyak berkutat dengan tipe data object. Antara array dan object ini, mereka sama-sama termasuk dalam golongan tipe data majemuk.

Perbedaan Array dan Object

Array Object
Diwujudkan dengan menggunakan fungsi array() atau blok []. Diwujudkan dalam bentuk kelas.
Tidak memiliki nama. Memiliki nama kelas yang digunakan untuk membedakannya dengan objek lainnya.
Menyimpan data dalam bentuk pasangan key dan value. Konsepnya sama saja, cuma dalam objek, key itu disebut property.
Key tidak punya level akses. Dengan begitu, isi array dapat diakses dengan bebas. Property memiliki level akses, diantaranya: public, protected dan private.
Isi array diakses dengan menggunakan tanda [] dan pengisian nilai menggunakan tanda =>.  Isi objek diakses menggunakan tanda ->.
 Array bisa langsung diisikan ke variabel. Kelas harus di instantiasi (membuatkan instance) menggunakan perintah new untuk mengisi variabel dengan object.
 Array tidak dapat diisi fungsi di dalamnya.  Kelas bisa diisi fungsi di dalamnya.

Dari perbedaan ini, antara array dan object, sudah tentu bisa dibedakan bentuknya.

Istilah dalam OOP

 class Bentuk fisik dari object.
namespace Pengelompokan kelas. Kelas berada di dalam namespace.
property Key yang diletakkan di dalam kelas dan memiliki value. Property ini juga bisa disebut sebagai item atau sifat.
method Method adalah fungsi di dalam kelas.
behaviour Istilah ini merujuk lebih merujuk kepada method.
encapsulation Penggunaan fungsi untuk membungkus property. Property ini menggunakan level akses private dan fungsi pembungkusnya menggunakan level akses public. Dengan begitu, kelas membatasi akses langsung terhadap property dan menggunakan fungsi untuk mengakses property tersebut.
inheritance Pewarisan sifat dari kelas induk kepada kelas anak. Property dan fungsi dari kelas induk akan terkandung di dalam kelas anak. Jadi tidak perlu dideklarasikan lagi di dalam kelas anak.
polymorphism Kemampuan untuk mengeksekusi object dengan kelas berbeda dalam satu proses. Caranya adalah membuat fungsi dengan nama yang sama pada tiap kelas berbeda. Setiap objek kelas berbeda ini dimasukkan dalam enumeration ataupun array.
inherit Diturunkan dari kelas induk.
extends Perintah yang digunakan untuk mewariskan sifat dari kelas induk ke kelas anak.
instantiation Pembuatan instance dari kelas.
instance Object baru dari kelas yang akan ditampung ke variabel.
public Level akses property maupun fungsi yang bisa diakses dengan bebas di dalam kelas itu sendiri maupun diluarnya.
protected Level akses property maupun fungsi yang membatasi aksesnya hanya untuk kelas itu sendiri dan kelas turunannya.
private Level akses property maupun fungsi yang membatas aksesnya hanya untuk kelas itu sendiri. Jadi akses di dalam kelas turunan dan diluar kelas itu akan ditolak.
static Property maupun fungsi dapat diakses tapi proses instantiation.
abstract Mewajibkan kelas turunan untuk mendeklarasikan fungsi tersebut.
overriding Fungsi di dalam kelas turunan dengan nama yang sama dengan fungsi di dalam kelas induk. Ini dapat memungkinkan kelas induk memanggil fungsi tersebut di dalamnya dirinya sendiri.
overloading Fungsi dengan nama yang sama di dalam kelas itu sendiri tapi dengan jumlah parameter yang berbeda. Tapi sayangnya, PHP tidak mendukung overloading. Tapi masih bisa diusahakan dengan menggunakan fungsi func_get_args(), func_get_arg() dan func_num_args().

Membuat Kelas

Ketika membuat kelas, ada baiknya kelas diletakkan di dalam sebuah file yang terpisah. Di dalam file itu lah kelas dideklarasikan. Nama kelas dan nama file sebaiknya ditulis sama persis. Nama kelas ditulis dengan awalan huruf besar dan di belakangnya diikuti huruf kecil. Jika nama kelas terdiri dari 2 kata, maka kedua kata disambungkan dan awalan tiap kata adalah huruf besar. Sistem penamaan seperti ini sangat direkomendasikan, walaupun sebenarnya anda bebas memberikan nama. Telah ada standar yang menentukan penamaan kelas.

Kode di bawah ini adalah contoh deklarasi kelas yang paling minimum.

<?php

class PemainBola
{
}

Tanda pembuka dan penutup kurung kurawal digunakan untuk menandai area kelas. Isi kelas akan diisi diantara kedua tanda tersebut. Kelas di atas belum bisa digunakan untuk keperluan apapun karena dianggap kelas kosong.

Memberikan Property

Tuliskan nama variabel yang diawali dengan level akses variabel tersebut dan diakhiri tanda titik koma.

<?php

class PemainBola
{
public $nama;
public $negara;
}

Kelas di atas bukan kelas kosong lagi dan dianggap telah memiliki 2 item berupa property di dalamnya. Karena nama kelasnya adalah "PemainBola", maka nama filenya adalah "PemainBola.php".

Membuat Object Kelas

Untuk membuat objek, file kelas harus dipanggil terlebih dahulu menggunakan fungsi include(). Setelah itu lakukan instantiation dengan menggunakan perintah new.

<?php

include ('PemainBola.php');

$pemain = new PemainBola();
$pemain->nama = 'Ronaldo';
$pemain->negara = 'Spanyol';

echo 'Nama Pemain Bola : ' . $pemain->nama . '<br/>';
echo 'Asal Negara: ' . $pemain->negara . '<br/>';

Jika sudah dijadikan objek ke variabel, maka property kelas dapat diakses menggunakan tanda -> dan kemudian dilanjutkan nama property. Karena property kelas diberi level akses public, maka dapat diakses dari luar kelas. Kalau diubah level aksesnya ke private, maka akan muncul error jika diakses dari luar kelas. Sekarang property dalam diisi nilai ataupun dibaca nilainya.

Catatan: Jika belum dideklarasikan nilai property, maka isi property adalah null.

Fungsi di Dalam Kelas

Untuk membuat fungsi di dalam kelas, sama seperti membuat fungsi biasa, namun diberikan level akses di depannya. Di bawah ini adalah tambahan kode yang lebih lanjut.

<?php

class PemainBola
{
public $nama;
public $negara;

public function menggiringBola()
{
return 'Bola digiring oleh ' . $this->nama;
}

public function menendangBola()
{
return 'Bola ditendang oleh ' . $this->nama;
}
}

Fungsi ini digunakan untuk melakukan aksi tertentu, maka dari itu nama fungsi biasanya ditulis dengan kata kerja. Standarnya nama fungsi kalau di PHP itu semuanya huruf kecil, tetapi kalau lebih dari satu kata, maka kata selanjutnya itu diawali dengan huruf besar.

Tunggu dulu! Variabel $this itu apa? Variabel $this adalah variabel yang digunakan di dalam fungsi kelas untuk mengakses isi di dalam kelas itu sendiri. Perhatikan kode pemanggilan object yang sebelumnya, object kelas diisi ke variabel $pemain. Karena itu berada di luar kelas, maka mengakses isi kelas melalui variabel $pemain. Sedangkan kalau di dalam badan kelas itu sendiri, tidak dibutuhkan lagi pemanggilan object baru, melainkan aksesnya melalui variabel $this. Ajaibnya variabel ini tidak pernah dibuat sebelumnya tapi sudah bisa diakses. Ya, variabel ini disediakan langsung oleh sistem.

Kode di bawah ini menunjukkan bagaimana pemanggilan fungsi di luar kelas.

<?php

include ('PemainBola.php');

$pemain = new PemainBola();
$pemain->nama = 'Ronaldo';
$pemain->negara = 'Spanyol';

echo $pemain->menggiringBola() . '<br/>';
echo $pemain->menendangBola() . '<br/>';

Apakah di dalam fungsi, fungsi yang lain dapat dipanggil? Tentu saja bisa, perhatikan kode di bawah ini.

<?php

class PemainBola
{
public $nama;
public $negara;

public function menggiringBola()
{
return 'Bola digiring oleh ' . $this->nama;
}

public function menendangBola()
{
return 'Bola ditendang oleh ' . $this->nama;
}

public function giringLaluTendangBola()
{
return $this->menggiringBola() . '<br/>' . $this->menendangBola();
}
}

Jadi, dengan menggunakan variabel $this, property dan fungsi di dalam kelas dapat diakses oleh kelas itu sendiri di dalamnya.

<?php

include ('PemainBola.php');

$pemain = new PemainBola();
$pemain->nama = 'Ronaldo';
$pemain->negara = 'Spanyol';

echo $pemain->giringLaluTendangBola() . '<br/>';

Membuat Object Kelas ke Array

Kelas dapat diduplikat menjadi lebih dari satu object dengan isi data yang berbeda-beda. Object-object yang berbeda namun berasal dari satu kelas ini kemudian dapat dimasukkan ke dalam array. Cara ini sangat sering digunakan dalam pemrograman game maupun untuk kebutuhan standar. Perhatikan kode di bawah ini untuk melihat contohnya.

<?php

include ('PemainBola.php');

$paraPemain[0] = new PemainBola();
$paraPemain[0]->nama = 'Ronaldo';
$paraPemain[0]->negara = 'Spanyol';

$paraPemain[1] = new PemainBola();
$paraPemain[1]->nama = 'Messi';
$paraPemain[1]->negara = 'Argentina';

foreach ($paraPemain as $pemain) {
echo $pemain->giringLaluTendangBola() . '<br/>';
}

Untuk lebih lanjutnya biasanya array diisi object secara otomatis dari sebuah tabel di database. Jadi kemudian kita membaca isi baris tabel tersebut menggunakan object.

Penutup

Saya harap tulisan ini dapat memberikan sedikit gambaran tentang konsep OOP pada PHP. Pengaplikasian konsep OOP sebenarnya sangat banyak. Oleh sebab itu, saya menulis artikel ini per bagian. Nantikan tulisan menarik selanjutnya mengenai konsep OOP. Terimakasih.

comments powered by Disqus