0% menganggap dokumen ini bermanfaat (0 suara)
198 tayangan

Tutorial OOP PHP

Dokumen tersebut membahas tentang pemrograman berbasis objek dengan PHP, mulai dari pengertian dasar seperti class, object, property dan method, hingga penerapannya seperti cara membuat objek, mengakses property dan method, serta konsep-konsep lanjutan seperti enkapsulasi, inheritance dan polymorphism.

Diunggah oleh

Ira Rohayati
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
198 tayangan

Tutorial OOP PHP

Dokumen tersebut membahas tentang pemrograman berbasis objek dengan PHP, mulai dari pengertian dasar seperti class, object, property dan method, hingga penerapannya seperti cara membuat objek, mengakses property dan method, serta konsep-konsep lanjutan seperti enkapsulasi, inheritance dan polymorphism.

Diunggah oleh

Ira Rohayati
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 53

DAFTAR PEMBAHASAN

1. Pengertian Pemrograman Berbasis Objek


2. Pengertian Class, Object, Property dan Method
3. Cara Membuat dan Mengakses Objek dalam PHP
4. Pengertian Enkapsulasi Objek (Public, Protected dan Private)
5. Pengertian dan Fungsi Variabel $this dalam Pemrograman Objek
6. Cara Penggunaan Pseudo-Variable $this dalam Objek PHP
7. Cara Membuat Method dalam Pemrograman Objek PHP
8. Pengertian Constructor dan Destructor
9. Pengertian Inheritance (Pewarisan)
10. Cara Mengakses Property dan Method Parent Class
11. Cara Mengakses Constructor dan Destructor Parent Class
12. Pengertian Static Property dan Static Method
13. Pengertian Konstanta Class dalam Pemrograman Objek
14. Pengertian Final Method dan Final Class Pemrograman Objek
15. Pengertian Abstract Class dan Abstract Method PHP
16. Pengertian Object Interface Dalam Pemrograman Berbasis Objek
17. Pengertian Polimorfisme dalam Pemrograman Objek PHP
1.Pemrograman Berbasis Objek dengan PHP
Saat ini, Object Oriented Programming (OOP) telah menjadi standar dalam dunia
pemograman, termasuk PHP. Walaupun kita bisa membuat program PHP tanpa
menggunakan OOP sama sekali, namun untuk membuat aplikasi real world yang fleksibel,
programmer PHP akan beralih menggunakan OOP.
Jika anda telah menguasai pemrograman PHP dasar seperti tipe data,
array, dan fungsi, mempelajari pemrograman objek PHP adalah langkah berikutnya. Fitur
dan desain kode yang ditawarkan dengan membuat program menggunakan objek akan sangat
memudahkan kita dalam merancang aplikasi website modern dan memiliki fleksibilitas yang
tinggi.
Terlebih jika anda memang serius menguasai PHP, memahami pengertian dan cara
penggunaan OOP dalam PHP sangat penting. Aplikasi framework PHP seperti Code Igniter,
Yii Framework, Symfony dan Laravel, semuanya menggunakan OOP.

2.Pengertian Pemrograman Berbasis Objek


Pemrograman Berbasis Objek atau Object Oriented Programming (OOP) adalah
sebuah tata cara pembuatan program (programming paradigm) dengan menggunakan konsep
objek yang memiliki data (atribut yang menjelaskan tentang objek) dan prosedur (function)
yang dikenal.dengan method.(http://en.wikipedia.org/wiki/Object-oriented_programming)
Dalam pengertian sederhananya, OOP adalah konsep pembuatan program dengan
memecah permasalahan program dengan menggunakan objek. Objek dapat diumpamakan
dengan fungsi khusus yang bisa berdiri sendiri. Untuk membuat sebuah aplikasi, berbagai
objek akan saling bertukar data untuk mencapai hasil akhir.
Berbeda dengan konsep fungsi atau function di dalam pemrograman,
sebuah objek bisa memiliki data dan function tersendiri. Setiap objek ditujukan untuk
mengerjakan sebuah tugas, dan menghasilkan nilai akhir untuk selanjutnya dapat ditampilkan
atau digunakan oleh objek lain.

Fungsi Pemrograman Berbasis Objek dalam PHP


PHP bukan bahasa pemrograman yang murni berbasis objek seperti Java. Bahkan,
konsep OOP dalam PHP baru hadir dalam PHP versi 4, dan disempurnakan oleh PHP versi
5. Dengan kata lain, OOP di PHP merupakan fitur tambahan. Anda bisa membuat situs
web dengan PHP tanpa menggunakan objek sama sekali.
Dalam studi pemrograman, pembuatan program dalam PHP tanpa menggunakan
objek disebut juga dengan pemrograman prosedural atau pemrograman fungsional.
Dikenal dengan pemrograman prosedural, karena kita memecah kode program menjadi
bagian-bagian atau fungsi-fungsi kecil, kemudian menyatukannya untuk menghasilkan nilai
akhir
Dengan membuat program secara prosedural, aplikasi bisa dibuat dengan cepat dan
mudah dipelajari jika dibandingkan dengan pemrograman berbasis objek (bagi anda yang
pernah mempelajari Java, tentu telah melewati hal ini :) ). Keuntungan pemrograman
berbasis objek baru terasa ketika program tersebut telah besar atau kita bekerja dengan tim
untuk membagi tugas. Konsep objek untuk memisahkan program menjadi bagian-bagian
yang berdiri sendiri akan memudahkan dalam membuat program.

Saya tidak akan panjang lebar menjelaskan tentang keuntungan atau kerugian
menggunakan OOP. Sebagai programmer web, OOP adalah salah satu makanan wajib.
Pembuatan website modern saat ini akan lebih mudah jika menggunakan template kode
program yang dikenal dengan framework. Daripada kita membuat situs mulai dari awal,
menggunakan framework akan mempercepat proses kerja. Dan, framework PHP hampir
semuanya dibuat menggunakan OOP.

3. Pengertian Class, Object, Property dan Method


Class adalah cetak biru atau blueprint dari object. Class digunakan hanya untuk
membuat kerangka dasar. Yang akan kita pakai nantinya adalah hasil cetakan dari class,
yakni object.Sebagai analogi, class bisa diibaratkan dengan laptop atau notebook. Kita tahu
bahwa laptopmemiliki ciri-ciri seperti merk, memiliki keyboard, memiliki processor, dan
beberapa ciri khas lain yang menyatakan sebuah benda tersebut adalah laptop. Selain
memiliki ciri-ciri, sebuah laptop juga bisa dikenakan tindakan, seperti: menghidupkan
laptop atau mematikan laptop.
Class dalam analogi ini adalah gambaran umum tentang sebuah benda. Di dalam
pemrograman nantinya, contoh class seperti: koneksi_database dan profile_user. Di dalam
PHP, penulisan class diawali dengan keyword class, kemudian diikuti dengan nama dari
class. Aturan penulisan nama class sama seperti aturan penulisan variabel dalam PHP, yakni
diawali dengan huruf atau underscore untuk karakter pertama, kemudian boleh diikuti dengan
huruf, underscore atau angka untuk karakter kedua dan selanjutnya. Isi dari class berada
dalam tanda kurung kurawal.

Berikut adalah contoh penulisan class dalam PHP:


<?php
class laptop {
// isi dari class laptop...
}
?>

Pengertian Property dalam Pemrograman Berbasis Objek


Property (atau disebut juga dengan atribut) adalah data yang terdapat dalam
sebuah class. Melanjutkan analogi tentang laptop, property dari laptop bisa berupa merk,
warna, jenis processor, ukuran layar, dan lain-lain.
Jika anda sudah terbiasa dengan program PHP, property ini sebenarnya
hanyalah variabel yang terletak di dalam class. Seluruh aturan dan tipe data yang biasa diinput
kedalam variabel, bisa juga diinput kedalam property. Aturan tata cara penamaan property sama
dengan aturan penamaan variabel.
Berikut adalah contoh penulisan class dengan penambahan
<?php
class laptop {
var $pemilik;
var $merk;
var $ukuran_layar;
// lanjutan isi dari class laptop...
}
?>

Dari contoh diatas, $merk, $ukuran_layar dan $jenis_processor adalah property dari class
laptop. Seperti yang kita lihat, penulisan property di dalam PHP sama dengan cara
penulisan variabel, yakni menggunakan tanda dollar ($). Sebuah class tidak harus
memiliki property.
Pengertian Method dalam Pemrograman Berbasis Objek
Method adalah tindakan yang bisa dilakukan didalam class. Jika menggunakan
analogi class laptop kita, maka contoh method adalah: menghidupkan laptop, mematikan
laptop, mengganti cover laptop, dan berbagai tindakan lain.
Method pada dasarnya adalah function yang berada di dalam class. Seluruh fungsi
dan sifat function bisa diterapkan kedalam method, seperti argumen/parameter,
mengembalikan nilai (dengan keyword return), dan lain-lain.

Pengertian Enkapsulasi (Encapsulation)


Enkapsulasi (encapsulation) adalah sebuah metoda untuk mengatur struktur class
dengan cara menyembunyikan alur kerja dari class tersebut.
Struktur class yang dimaksud adalah property dan method. Dengan enkapsulasi,
kita bisa membuat pembatasan akses kepada property dan method, sehingga
hanya property dan method tertentu saja yang bisa diakses dari luar class. Enkapsulasi juga
dikenal dengan istilah information hiding.

Berikut adalah contoh penulisan class dengan penambahan method:

<?php
class laptop {
function hidupkan_laptop() {
//... isi dari method hidupkan_laptop
}

function matikan_laptop() {
//... isi dari method matikan_laptop
}

... //isi dari class laptop


}
?>

Pengertian Object dalam Pemrograman Berbasis Objek


Object atau Objek adalah hasil cetak dari class, atau hasil konkrit dari class. Jika
menggunakan analogi class laptop, maka objek dari class laptop bisa berupa: laptop_andi,
laptop_anto, laptop_duniailkom, dan lain-lain. Objek dari class laptop akan memiliki seluruh
ciri-ciri laptop, yaitu property dan method-nya.
Proses mencetak objek dari class ini disebut dengan instansiasi (atau instantiation dalam
bahasa inggris). Pada PHP, proses instansiasi dilakukan dengan menggunakan keyword
new. Hasil cetakan class akan disimpan dalam variabel untuk selanjutnya digunakan dalam
proses program.
Sebagai contoh, berikut adalah cara
membuat objek laptop_andi dan laptop_anto yang dibuat dari class laptop:

<?php
class laptop {
//... isi dari class laptop
}

$laptop_andi = new laptop();


$laptop_anto = new laptop();
?>

Dari contoh diatas, $laptop_andi dan $laptop_anto merupakan objek dari class laptop. Kedua objek
ini akan memiliki seluruh property dan method yang telah dirancang dari class laptop

3.Cara Mengakses Objek dalam PHP


Cara mengakses objek yang saya maksud sebenarnya adalah cara untuk mengakses
isi dari sebuah objek, yakni property dan method-nya. Agar lebih mudah
dipahami, berikut adalah revisi contoh class laptop sebelumnya:
<?php
class laptop {

// buat property untuk class laptop


var $pemilik;
var $merk;
var $ukuran_layar;

function hidupkan_laptop() {
return "Hidupkan Laptop";
}
function matikan_laptop() {
return "Matikan Laptop";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_anto = new laptop();

// set property
$laptop_anto->pemilik="Anto";
$laptop_anto->merk="Asus";
$laptop_anto->ukuran_layar="15 inchi";

// tampilkan property
echo $laptop_anto->pemilik;
echo "<br />";
echo $laptop_anto->merk;
echo "<br />";
echo $laptop_anto->ukuran_layar;
echo "<br />";

// tampilkan method
echo $laptop_anto->hidupkan_laptop();
echo "<br />";
echo $laptop_anto->matikan_laptop();
?>
Jika anda menjalankan kode program di atas, berikut adalah hasil yang didapat:
Anto
Asus
15 inchi
Hidupkan Laptop
Matikan Laptop

Objek Sebagai Entitas Terpisah


Dalam contoh kode diatas, saya hanya menggunakan 1 buah objek yang berasal
dari class laptop. Namun pada dasarnya sebuah class bisa digunakan untuk membuat
berapapun banyak objek. Setiap objek merupakan bagian terpisah, namun tetap
memiliki property dan method yang berasal dari class laptop.

Berikut adalah contoh pembuatan beberapa objek dari class laptop:

<?php
// buat class laptop
class laptop {

// buat property untuk class laptop


var $pemilik;

// buat method untuk class laptop


function hidupkan_laptop() {
return "Hidupkan Laptop";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_anto = new laptop();
$laptop_andi = new laptop();
$laptop_dina = new laptop();

// set property
$laptop_anto->pemilik="Anto";
$laptop_andi->pemilik="Andi";
$laptop_dina->pemilik="Dina";

// tampilkan property
echo $laptop_anto->pemilik; // Anto
echo "<br />";
echo $laptop_andi->pemilik; // Andi
echo "<br />";
echo $laptop_dina->pemilik; // Dina
echo "<br />";
?>

Class laptop diatas saya sederhanakan agar lebih singkat. Setelah pembuatan class, saya
kemudian membuat 3 buah objek dari class laptop,
yakni $laptop_anto, $laptop_andi dan $laptop_dina. Ketiga objek ini memiliki struktur yang
sama (sama-sama berasal dari class laptop), namun memiliki isi data yang berbeda-beda.
Agar lebih paham, silahkan anda mencoba menambahkan.
beberapa property dan method untuk class laptop diatas.
4.Pengertian Enkapsulasi Objek (Public, Protected dan Private)

Pengertian Enkapsulasi (Encapsulation)


Enkapsulasi (encapsulation) adalah sebuah metoda untuk mengatur struktur class
dengan cara menyembunyikan alur kerja dari class tersebut.
Struktur class yang dimaksud adalah property dan method. Dengan enkapsulasi, kita bisa
membuat pembatasan akses kepada property dan method, sehingga
hanya property dan method tertentu saja yang bisa diakses dari luar class. Enkapsulasi juga
dikenal dengan istilah information hiding.
Dengan enkapsulasi, kita bisa memilih property dan method apa saja yang boleh
diakses, dan mana yang tidak boleh diakses. Dengan menghalangi kode program lain untuk
mengubah property tertentu, class menjadi lebih terintegrasi, dan menghindari kesalahan
ketika seseorang mencoba mengubahnya. Programmer yang merancang class bias
menyediakan property dan method khusus yang memang ditujukan untuk diakses dari luar.
Melanjutkan analogi tentang class laptop, perusahaan pembuat laptop telah
menyediakan method khusus untuk menghidupkan laptop, yakni dengan cara menekan
tombol on. Di dalam laptop sendiri, banyak method-method lain yang akan dijalankan
ketika kita menyalakan laptop, contohnya: mengirim sinyal booting ke processor, mengirim
data dari processor ke memory, dan mengirim sinyal listrik ke LED di monitor. Akan tetapi,
proses ini adalah method internal laptop dimana kita tidak perlu memahaminya untuk
menghidupkan laptop.

Enkapsulasi Objek: Public, Protected dan Private

Untuk membatasi hak akses kepada property dan method di dalam


sebuah class, Objek Oriented Programming menyediakan 3 kata kunci,
yakni Public, Protected dan Private. Kata kunci ini diletakkan sebelum
nama property atau sebelum nama method. Berikut adalah pembahasannya:

Pengertian Hak Akses: Public


Ketika sebuah property atau method dinyatakan sebagai public, maka seluruh kode program
di luar class bisa mengaksesnya, termasuk class turunan. Berikut adalah contoh
penulisan public property dan public method dalam PHP:
<?php

// buat class laptop


class laptop {

// buat public property


public $pemilik;

// buat public method


public function hidupkan_laptop() {
return "Hidupkan Laptop";
}
}
// buat objek dari class laptop (instansiasi)
$laptop_anto = new laptop();

// set property
$laptop_anto->pemilik="Anto";

// tampilkan property
echo $laptop_anto->pemilik; // Anto

// tampilkan method
echo $laptop_anto->hidupkan_laptop(); // "Hidupkan Laptop"
?>

Perhatikan penambahan kata public sebelum nama property dan nama method. Kode diatas
pada dasarnya sama dengan contoh class laptop kita dalam tutorial sebelum ini. Jika hak
akses property dan method tidak ditulis, maka PHP menganggapnya sebagai public.

Pengertian Hak Akses: Protected


Jika sebuah property atau method dinyatakan sebagai protected,
berarti property atau method tersebut tidak bisa diakses dari luar class, namun bisa diakses oleh class
itu sendiri atau turunan class tersebut.
Apabila kita mencoba mengakses protected property atau protected method dari luar class, akan
menghasilkan error, seperti contoh berikut ini:
<?php

// buat class laptop


class laptop {

// buat protected property


protected $pemilik;

// buat protected method


protected function hidupkan_laptop() {
return "Hidupkan Laptop";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_anto = new laptop();

// set protected property akan menghasilkan error


$laptop_anto->pemilik="Anto";
// Fatal error: Cannot access protected property laptop::$pemilik

// tampilkan protected property akan menghasilkan error


echo $laptop_anto->pemilik;
// Fatal error: Cannot access protected property laptop::$pemilik

// jalankan protected method akan menghasilkan error


echo $laptop_anto->hidupkan_laptop();
// Fatal error: Call to protected method laptop::hidupkan_laptop()
// from context
?>
Dalam contoh diatas, pemanggilan property $pemilik dan method hidupkan_laptop() dari luar class
akan menghasilkan error.
Walaupun akses level protected tidak bisa diakses dari luar class, namun bisa diakses dari dalam
class itu sendiri, berikut adalah contohnya:
<?php

// buat class laptop


class laptop {

// buat protected property


protected $pemilik="Anto";

public function akses_pemilik() {


return $this->pemilik;
}
protected function hidupkan_laptop() {
return "Hidupkan Laptop";
}
public function paksa_hidup() {
return $this->hidupkan_laptop();
}
}

// buat objek dari class laptop (instansiasi)


$laptop_anto = new laptop();

// jalankan method akses_pemilik()


echo $laptop_anto->akses_pemilik(); // "Anto"

// jalankan method paksa_hidup()


echo $laptop_anto->paksa_hidup(); // "Hidupkan Laptop"
?>

Hampir sama dengan contoh kita sebelumnya, property $pemilik di deklarasikan sebagai protected,
sehingga pengaksesan dari luar class akan menghasilkan error. Oleh karena itu, saya membuat
sebuah public method yang akan menampilkan hasil property $pemilik, yakni
method akses_pemilik().
Begitu juga dengan method hidupkan_laptop() yang tidak bisa diakses secara langsung. Saya
menambahkan method paksa_hidup() yang secara internal akan mengakses
method hidupkan_laptop().
Selain dari dalam class itu sendiri, property dan method dengan hak akses protected juga bisa diakses
dari class turunan (Kita akan membahas tentang penurunan class dalam tutorial lain):
<?php

// buat class komputer


class komputer{

// property dengan hak akses protected


protected $jenis_processor = "Intel Core i7-4790 3.6Ghz";
}

// buat class laptop


class laptop extends komputer{
public function tampilkan_processor() {
return $this->jenis_processor;
}
}
// buat objek dari class laptop (instansiasi)
$laptop_baru = new laptop();

// jalankan method
echo $laptop_baru->tampilkan_processor(); // "Intel Core i7-4790 3.6Ghz"
?>
Pada kode diatas, walaupun method $jenis_processor di set sebagai protected pada class komputer,
tetapi masih bisa diakses dari class laptop yang merupakan turunan dari class komputer.

Pengertian Hak Akses: Private


Hak akses terakhir dalam konsep enkapsulasi adalah private. Jika sebuah property atau method di-set
sebagai private, maka satu-satunya yang bisa mengakses adalah class itu sendiri. Class lain tidak bisa
mengaksesnya, termasuk class turunan.
Sebagai contoh, berikut adalah hasil yang di dapat jika kita mengakses property dan method dengan
level private:
<?php

// buat class komputer


class komputer {

// property dengan hak akses protected


private $jenis_processor = "Intel Core i7-4790 3.6Ghz";

public function tampilkan_processor() {


return $this->jenis_processor;
}
}

// buat class laptop


class laptop extends komputer{

public function tampilkan_processor() {


return $this->jenis_processor;
}
}

// buat objek dari class laptop (instansiasi)


$komputer_baru = new komputer();
$laptop_baru = new laptop();

// jalankan method dari class komputer


echo $komputer_baru->tampilkan_processor(); // "Intel Core i7-4790 3.6Ghz"

// jalankan method dari class laptop (error)


echo $laptop_baru->tampilkan_processor();
// Notice: Undefined property: laptop::$jenis_processor
?>

Dalam kode diatas, saya membuat 2 buah class, yakni class komputer, dan class
laptop. Class laptop merupakan turunan dari class komputer. Di dalam class
komputer terdapat property$jenis_processor dengan akses level private. Di dalam class
komputer dan class laptop, saya membuat method tampilkan_processor() yang digunakan
untuk mengakses property $jenis_processor.
Pengaksesan method tampilkan_processor() dari objek $komputer_baru sukse ditampilkan
karena berada di dalam satu class dimana property $jenis_processor berada.Akan tetapi, jika
method tampilkan_processor() diakses dari objek $laptop_baru yang merupakan turunan
dari class komputer, PHP akan mengeluarkan error karena property $jenis_processor tidak
dikenal.

Akses level private sering digunakan untuk menyembunyikan property dan method agar
tidak bisa diakses di luar class.

5. Pengertian dan Fungsi Variabel $this dalam Pemrograman Objek


Variabel $this adalah sebuah variabel khusus dalam OOP PHP yang digunakan
sebagai penunjuk kepada objek, ketika kita mengaksesnya dari dalam class. Dalam manual
PHP, $this disebut dengan istilah: pseudo-variable.

Untuk lebih memudahkan pemahaman, kita akan bahas menggunakan contoh.


Berikut adalah class laptop dengan beberapa property dan method.

<?php

// buat class laptop


class laptop {

// buat property untuk class laptop


public $pemilik;
public $merk;
public $ukuran_layar;

// buat method untuk class laptop


public function hidupkan_laptop() {
return "Hidupkan Laptop";
}
public function matikan_laptop() {
return "Matikan Laptop";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_anto = new laptop();
$laptop_andi = new laptop();
?>

Dalam kode diatas, saya membuat class laptop dengan 3 property, yakni: $pemilik,
$merk dan $ukuran_layar. Ketiga property ini belum memiliki nilai. Di dalam class laptop juga
terdapat 2 buah method, yakni hidupkan_laptop() dan matikan_laptop(), kedua method ini akan
mengembalikan nilai string. Seluruh property dan method dari class laptop memiliki hak
akses public, sehingga bisa diakses dari luar class.
Setelah membuat class, saya kemudian men-instansiasi-nya kedalam 2 buah
objek $laptop_anto dan $laptop_andi.
Jika anda menjalankan kode program diatas, di dalam web browser belum tampil apa-apa, karena saya
belum memanggil method atau property apapun dari kedua objek.
Selanjutnya, saya ingin menambahkan isi property $pemilik kepada kedua objek, berikut adalah kode
yang diperlukan:
$laptop_anto->pemilik = "Anto";
$laptop_andi->pemilik = "Andi";

Dengan perintah diatas, property $pemilik pada masing-masing objek telah berisi nilai. Untuk
menampilkan nilai dari objek tersebut, kita tinggal mengaksesnya dengan kode berikut:
echo $laptop_anto->pemilik; // Anto
Sampai disini, kita telah memahami cara mengakses property objek dari objek itu sendiri, yakni
dengan menggunakan format:

$nama_objek->nama_property

Bagaimana jika property tersebut telah di-set nilainya dari dalam class? Berikut adalah
perubahan class laptop:

<?php
// buat class laptop
class laptop {

// buat property untuk class laptop


public $pemilik="Andi";

// buat method untuk class laptop


public function hidupkan_laptop() {
return "Hidupkan Laptop";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_baru = new laptop();
$laptop_lama = new laptop();
?>

Class laptop diatas saya revisi sehingga hanya memiliki 1 property dan 1 method. Perhaatikan bahwa
property $pemilik telah diisi pada level class, sehingga pada saat pembuatan objek (instansiasi),
seluruh objek akan memiliki nilai ini.
Objek $laptop_baru dan $laptop_lama sama-sama berasal dari class laptop, dan nilai property
$pemilik sama- sama berisi Andi.

echo $laptop_baru->pemilik; // Andi


echo $laptop_lama->pemilik; // Andi

Lebih jauh lagi, pemanggilan method juga akan menghasilkan nilai yang sama:
echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop"
echo $laptop_lama->hidupkan_laptop(); // "Hidupkan Laptop"

Jika anda masih bersama saya :), kita akan masuk kedalam bagian terpenting. Bagaimana jika saya
ingin ketika method hidupkan_laptop() dipanggil, yang akan ditampilkan adalah : Hidupkan
Laptop Andi?

Jika anda telah mempelajari dasar-dasar PHP, tentunya cara paling jelas adalah dengan
mengubah return string di dalam method hidupkan_laptop() sebagai berikut:
public function hidupkan_laptop() {
return "Hidupkan Laptop Andi";
}
Cara tersebut tidak salah, dan akan menghasilkan nilai Hidupkan Laptop Andi pada saat
pemanggilan method hidupkan_laptop(). Tetapi, bukankah kita telah memiliki
property $pemilik dengan nilai Andi? kita bisa menggunakan property ini dan menambahkannya ke
dalam method hidupkan_laptop

Untuk mencoba ide tersebut, silahkan ubah contoh class laptop sebelumnya menjadi berikut:
<?php
// buat class laptop
class laptop {

// buat property untuk class laptop


public $pemilik="Andi";
public $merk;

// buat method untuk class laptop


public function hidupkan_laptop() {
return "Hidupkan Laptop $pemilik";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_baru = new laptop();

echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop"


?>

Jika anda menjalankan kode diatas, hasil yang didapat adalah:


Notice: Undefined variable: pemilik in
D:\xampp\htdocs\oop_php\belajar_objek.php on line 11 Hidupkan Laptop

Dari penjelasan error PHP, dinyatakan bahwa variabel pemilik tidak terdefinisi pada baris
11. Baris tersebut adalah baris dimana kita menampilkan Hidupkan Laptop $pemilik
dengan methodhidupkan_laptop().

Apa yang terjadi? Bukankah $pemilik=Andi telah terdefenisi pada property class?.Inilah
yang dimaksud dalam awal tutorial kali ini, kita sedang mencoba mengakses property objek
dari dalam class. Jika anda bingung dengan pengertian ini, anda tidak sendiri. Saya juga
kesulitan dalam memahami konsep ini pada pertama kali belajar OOP.

Untuk memahaminya, kita harus ingat bahwa class hanyalah sebuah blue print
atau kerangka. Seluruh property dan method nantinya akan diakses dari dalam objek, bukan
dari dalam class. Pada saat proses instansiasi class, seluruh property dan method akan
dicopy kedalam objek.

Perintah: $laptop_baru = new laptop() akan


membuat objek $laptop_baru memiliki property$pemilik dan method hidupkan_laptop() (s
esuai dengan kerangka dari class laptop). Seluruh perintah lanjutan yang kita lakukan berada
di dalam objek $laptop_baru, bukan di dalam class laptop.
Ketika kita menjalankan method hidupkan_laptop(), objek $laptop_baru akan menemui
baris perintah:
Hidupkan Laptop $pemilik
Untuk mengatasi masalah ini, kita harus mengubah defenisi method hidupkan_laptop()
menjadi:
"Hidupkan Laptop $this->pemilik";

Variabel $this merujuk kepada objek yang sedang menginstansiasi class.


Maka di dalam objek $laptop_baru, akan menjadi:

"Hidupkan Laptop $laptop_baru->pemilik";

Untuk menguji pemahaman kita, silahkan pelajari kode berikut ini:


<?php
// buat class laptop
class laptop {

// buat property untuk class laptop


public $pemilik="Andi";

// buat method untuk class laptop


public function hidupkan_laptop() {
return "Hidupkan Laptop $this->pemilik";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_baru = new laptop();

echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop Andi";

//ubah isi property $pemilik pada objek $laptop_baru


$laptop_baru->pemilik="Arie";

echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop Arie";

// buat objek baru dari class laptop dan panggil hidupkan_laptop()


$laptop_lama = new laptop();
echo $laptop_lama->hidupkan_laptop();
?>

6.Cara Penggunaan Pseudo-Variable $this dalam Objek PHP


Dalam contoh berikut, saya membuat class laptop dengan method yang saling
memanggil methodlain menggunakan variabel $this, silahkan anda pahami alur kerja
dari class dan objek dibawah ini:
<?php
// buat class laptop
class laptop {

// buat property untuk class laptop


public $pemilik;
public $merk;

// buat method untuk class laptop


public function hidupkan_laptop() {
return "Hidupkan Laptop $this->merk punya $this->pemilik";
}

public function matikan_laptop() {


return "Matikan Laptop $this->merk punya $this->pemilik";
}

public function restart_laptop() {


$matikan=$this->matikan_laptop();
$hidupkan= $this->hidupkan_laptop();
$restart=$matikan."<br />".$hidupkan;
return $restart;
}
}

// buat objek dari class laptop (instansiasi)


$laptop_anto = new laptop();

// isi property objek


$laptop_anto->pemilik="Anto";
$laptop_anto->merk="Asus";

echo $laptop_anto->hidupkan_laptop();
// hasil: "Hidupkan Laptop Asus punya Anto";

echo "<br />";

echo $laptop_anto->matikan_laptop();
// hasil: "Matikan Laptop Asus punya Anto";

echo "<br />";

echo $laptop_anto->restart_laptop();
// hasil:
// "Matikan Laptop Asus punya Anto";
// "Hidupkan Laptop Asus punya Anto";
?>

Contoh class laptop diatas, mirip dengan contoh-contoh kita sebelumnya, dengan beberapa
modifikasi. Saya membuat 2 property: $pemilik dan $merk, kemudian membuat 3
method: hidupkan_laptop(), matikan_laptop(), dan restart_laptop().

Dalam method hidupkan_laptop(), dan saya memanggil property $pemilik dan $merk. Karena
property ini nantinya akan dipanggil dari objek, maka kita harus menggunakan variabel $this:
"Hidupkan Laptop $this->merk punya $this->pemilik";

Variabel $this nantinya akan merujuk kepada objek yang memanggil method. Misalkan kita
memiliki objek $laptop_anto, maka hasil yang dijalankan adalah:
"Hidupkan Laptop $laptop_anto ->merk punya $laptop_anto->pemilik";
Method matikan_laptop() juga menggunakan pola perintah yang sama.

Untuk method restart_laptop(), di dalam struktur method ini saya memanggil


method matikan_laptop() dan hidupkan_laptop(). Karena alasan yang sama
dengan property $pemilik dan$merk, saya juga menggunakan variabel $this untuk memanggil
method. Hasil pemanggilan kedua method, kemudian disambung dan disimpan kedalam
variabel $restart.
public function restart_laptop() {
$matikan=$this->matikan_laptop();
$hidupkan= $this->hidupkan_laptop();
$restart=$matikan."<br />".$hidupkan;
return $restart;
}

7.Cara Membuat Method dalam Pemrograman Objek PHP


Karena method pada dasarnya hanyalah function yang berada di dalam sebuah class, maka
kita bisa memberikan argumen/parameter ke dalam method tersebut. Langsung saja kita lihat struktur
dasar pembuatan parameter di dalam method PHP:
hak_akses nama_method ($argumen1, argumen2,
dst...)
{
//... isi dari method
}

Dengan menggunakan contoh method hidupkan_laptop(), kita bisa membuatnya menjadi:


public hidupkan_laptop($pemilik, $merk)
{
//... isi dari method
}

Sehingga apabila metod itu dipanggil dari objek, kita tinggal mengisi argumen dengan nilai yang
diinginkan, seperti contoh berikut:
$laptop_andi(Andi,Lenovo);

Cara Membuat Argumen dalam Method Class


Modifikasi Class Laptop dengan penambahan fitur argument dalam method :
<?php
// buat class laptop
class laptop {
// buat method untuk class laptop
public function hidupkan_laptop($pemilik,$merk) {
return "Hidupkan Laptop $merk punya $pemilik";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_andi= new laptop();

echo $laptop_andi->hidupkan_laptop("Andi", "Lenovo");


// hasil: "Hidupkan Laptop Lenovo punya Andi";
?>
Dalam contoh diatas, saya memanggil method hidupkan_laptop() dengan 2 argumen, yakni Andi
dan Lenovo. Kedua nilai ini akan diproses oleh method hidupkan_laptop().

Perhatikan bahwa saya tidak menggunakan variabel $this, karena argumen tersebut milik method,
perhatikan bedanya jika saya mengubah class laptop menjadi berikut ini:
<?php
// buat class laptop
class laptop {
// buat property untuk class laptop
private $pemilik="Anto";
private $merk="Acer";

// buat method untuk class laptop


public function hidupkan_laptop($pemilik,$merk) {
return "Hidupkan Laptop $merk punya $pemilik";
}

public function hidupkan_laptop_anto() {


return "Hidupkan Laptop $this->merk punya $this->pemilik";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_andi= new laptop();

echo $laptop_andi->hidupkan_laptop("Andi", "Lenovo");


// hasil: "Hidupkan Laptop Lenovo punya Andi";

echo $laptop_andi->hidupkan_laptop_anto();
// hasil: "Hidupkan Laptop Acer punya Anto";
?>
Pada class laptop diatas, saya menambahkan 2 property: $pemilik dan $merk, kemudian memberikan
nilai Anto dan Acer. Jika yang kita inginkan adalah nilai dari variabel ini, maka di
dalam method, kita harus menggunakan $this.

Semua fitur function, juga bisa diterapkan di dalam method, termasuk default
parameter seperti yang pernah kita bahas pada Tutorial Belajar PHP: Cara Pembuatan
Default Parameter pada Fungsi PHP, seperti contoh berikut:
<?php
// buat class laptop
class laptop {
// buat method untuk class laptop
public function hidupkan_laptop($pemilik="Joko",$merk="Samsung") {
return "Hidupkan Laptop $merk punya $pemilik";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_andi= new laptop();

echo $laptop_andi->hidupkan_laptop();
// hasil: "Hidupkan Laptop Samsung punya Joko";

echo "<br />";

echo $laptop_andi->hidupkan_laptop("Andi", "Lenovo");


// hasil: "Hidupkan Laptop Lenovo punya Andi";
?>

Pada contoh kode program PHP diatas, dengan membuat method sebagai berikut:
public function hidupkan_laptop($pemilik="Joko",$merk="Samsung")
Maka, ketika method tersebut dipanggil tanpa menambahkan argumen, nilai Joko dan Samsung
akan digunakan sebagai nilai default, namun jika argumen ditulis, nilai argumen yang diinput akan
menimpa nilai default ini.

8.Pengertian Constructor dan Destructor


Constructor (bahasa indonesia: konstruktor) adalah method khusus yang akan dijalankan
secara otomatis pada saat sebuah objek dibuat (instansiasi), yakni ketika perintah new dijalankan.
Constructor biasa digunakan untuk membuat proses awal dalam mempersiapkan objek, seperti
memberi nilai awal kepada property, memanggil method internal dan beberapa proses lain yang
digunakan untuk mempersiapkan objek.

Dalam PHP, constructor dibuat menggunakan method : __construct().

Destructor (bahasa indonesia: destruktor) adalah method khusus yang dijalankan secara otomatis
pada saat sebuah objek dihapus. Di dalam PHP, seluruh objek secara otomatis dihapus ketika
halaman PHP dimana objek itu berada selesai diproses. Tetapi kita juga dapat menghapus objek
secara manual.

Destructor biasanya digunakan untuk membersihkan beberapa variabel, atau menjalankan proses
tertentu sebelum objek dihapus.

Dalam PHP, destructor dibuat menggunakan method : __destruct().

Sebagai tutorial kita kali ini, berikut adalah contoh penggunaan constructor dan destructor dalam
PHP:
<?php
// buat class laptop
class laptop {

private $pemilik = "Andi";


private $merk = "Lenovo";

public function __construct(){


echo "Ini berasal dari Constructor Laptop";
}

public function hidupkan_laptop(){


return "Hidupkan Laptop $this->merk punya $this->pemilik";

}
public function __destruct(){
echo "Ini berasal dari Destructor Laptop";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_andi= new laptop();

echo "<br />";


echo $laptop_andi->hidupkan_laptop();
echo "<br />";
?>
Dalam contoh diatas, saya membuat class laptop dengan 3 method:
Method __construct() merupakan constructor dari class laptop. Method ini akan
dipanggil secara otomatis ketika class laptop di instansiasi.
Method hidupkan_laptop() merupakan method biasa yang akan menampilkan hasil
string. Untuk menggunakan method ini, kita memanggilnya dari objek.
Method ketiga adalah __destruct() yang merupakan destructor dari class laptop.
Method ini akan dipanggil saat objek dihapus.

Setelah pendefinisian class, saya membuat objek $laptop_andi, dan memanggil


method hidupkan_laptop(). Berikut adalah hasil yang didapat:
Ini berasal dari Constructor Laptop
Hidupkan Laptop Lenovo punya Andi
Ini berasal dari destructor Laptop

Seperti yang terlihat, method __construct() dan __destruct() secara otomatis dipanggil
saat objek dibuat dan saat objek dihapus. Untuk mencoba
menghapus objek $laptop_andi secara manual, kita bisa menggunakan fungsi unset() sebagai berikut:
<?php
// buat class laptop
class laptop {

private $pemilik = "Andi";


private $merk = "Lenovo";

public function __construct(){


echo "Ini berasal dari Constructor Laptop";
}

public function hidupkan_laptop(){


return "Hidupkan Laptop $this->merk punya $this->pemilik";

}
public function __destruct(){
echo "Ini berasal dari Destructor Laptop";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_andi= new laptop();

echo "<br />";


echo $laptop_andi->hidupkan_laptop();
echo "<br />";

// hapus objek $laptop_andi


unset($laptop_andi);

echo "<br />";


echo "Objek Telah Dihancurkan";
?>

Jika kita menjalankan kode diatas, berikut adalah hasil yang didapat:
Ini berasal dari Constructor Laptop
Hidupkan Laptop Lenovo punya Andi
Ini berasal dari Destructor Laptop
Objek Telah Dihancurkan
Setelah memanggil method $laptop_andi->hidupkan_laptop(), saya kemudian
menghapus objek$laptop_andi secara manual menggunakan fungsi unset($laptop_andi).

Untuk membuktikan bahwa destructor $laptop_andi sudah dijalankan, saya menambahkan


perintah echo Objek Telah Dihancurkan diakhir halaman. Sehingga kita bisa melihat
bahwa destructor objek $laptop andi di jalankan sebelum dihapus otomatis oleh PHP. Silahkan anda
coba hapus perintah unset($laptop_andi), maka string Objek Telah Dihancurkan akan tampil
sebelum destructor objek $laptop_andi.

Contoh constructor yang sering digunakan untuk membuat objek dengan nilai awal. Konsep ini sering
digunakan dalam pemrograman objek. Berikut adalah contoh penggunaannya:
<?php
// buat class laptop
class laptop {

private $pemilik;
private $merk;

// constructor sebagai pembuat nilai awal


public function __construct($pemilik, $merk) {
$this->pemilik = $pemilik;
$this->merk = $merk;
}

public function hidupkan_laptop() {


return "Hidupkan Laptop $this->merk punya $this->pemilik";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_andi= new laptop("Andi", "Lenovo");

echo $laptop_andi->hidupkan_laptop();
echo "<br />";

$laptop_anto= new laptop("Anto", "Acer");

echo $laptop_anto->hidupkan_laptop();
?>
Pada kode diatas, saya menggunakan constructor sebagai pembuat nilai awal dari objek.
Method constructor menerima 2 buah argumen yang kemudian disimpan
kedalam property internal objek.

10.Pengertian Inheritance (Pewarisan)


Inheritance atau Pewarisan/Penurunan adalah konsep pemrograman dimana sebuah class dapat
menurunkan property dan method yang dimilikinya kepada class lain.Konsep inheritancedigunakan
untuk memanfaatkan fitur code reuse untuk menghindari duplikasi kode program.

Konsep inheritance membuat sebuah struktur atau hierarchy class dalam kode program. Class yang
akan diturunkan bisa disebut sebagai class induk (parent class), super class, atau base class.
Sedangkan class yang menerima penurunan bisa disebut sebagai class anak (child class), sub class,
derived class atauheir class.
Tidak semua property dan method dari class induk akan diturunkan. Property dan method dengan hak
akses private, tidak akan diturunkan kepada class anak. Hanya property dan method dengan hak
akses protected dan public saja yang bisa diakses dari class anak.

Di dalam PHP, inheritance / penurunan dari sebuah class kepada class lain menggunakan kata kunci:
extends, dengan penulisan dasar sebagai berikut:
class induk {
//...isi class induk
}

class anak extends induk


{
//... class anak bisa mengakses
//... property dan method class induk
}

Agar lebih mudah dipahami, kita akan langsung masuk kedalam contoh program
penggunaan inheritance/penurunan di dalam PHP:
<?php
// buat class induk: komputer
class komputer {

public $merk;
public $processor;
public $memory;

public function beli_komputer() {


return "Beli komputer baru";
}
}

// turunkan class komputer ke laptop


class laptop extends komputer {

public function lihat_spec() {


return "merk: $this->merk, processor: $this->processor,
memory: $this->memory";
}
}

// buat objek dari class laptop (instansiasi)


$laptop_baru = new laptop();

// isi property objek


$laptop_baru->merk = "acer";
$laptop_baru->processor ="intel core i5";
$laptop_baru->memory = "2 GB";

//panggil method objek


echo $laptop_baru->beli_komputer();
echo "<br />";
echo $laptop_baru->lihat_spec();
?>
Dalam contoh kode diatas, saya membuat class komputer dengan beberapa property dan
sebuah method. Property class komputer belum berisi nilai apa-apa.
Dibawah class komputer, saya membuat class laptop extends class komputer. Disini
saya menurunkan class komputer kedalam class laptop. Di dalam class laptop, kita bisa mengakses
seluruh property dan method apapun dari class komputer selama memiliki hak
akses public atau protected

Untuk membuktikan hal tersebut, saya membuat objek $laptop_baru dari class laptop. Perhatikan
bahwa kita bisa mengakses property $merk, $processor, dan$memory yang semuanya adalah
milik class komputer, bukan class laptop. Method beli_komputer() juga sukses diakses dari
objek $laptop baru. Inilah yang dimaksud dengan inheritance/penurunan class dalam OOP.

PHP tidak membatasi berapa banyak penurunan objek yang bisa dilakukan, dalam contoh berikut,
saya membuat 3 buah class yang saling menurunkan:
<?php
// buat class komputer
class komputer {
protected function beli_komputer() {
return "Beli komputer baru";
}
}

// turunkan class komputer ke laptop


class laptop extends komputer {
protected function beli_laptop() {
return "Beli laptop baru";
}
}

// turunkan class laptop ke chromebook


class chromebook extends laptop {
protected function beli_chromebook() {
return "Beli chromebook baru";
}

public function beli_semua(){


$a = $this->beli_komputer();
$b = $this->beli_laptop();
$c = $this->beli_chromebook();
return "$a <br /> $b <br /> $c";
}
}

// buat objek dari class laptop (instansiasi)


$gadget_baru = new chromebook();

//panggil method objek


echo $gadget_baru->beli_semua();

// $gadget_baru->beli_komputer();
// Fatal error: Call to protected method komputer::beli_komputer()
?>
Dalam contoh diatas, saya membuat class komputer yang diturunkan kepada class laptop, dan
kemudian diturunkan lagi kepada class chromebook. Dari dalam class chromebook ini kemudian saya
memanggil method dari class diatasnya.

Jika anda perhatikan, setiap method selain method beli_semua(), memiliki hak akses protected. Hak
akses protected ini menghalangi kode program lain untuk mengaksesnya, selain classturunan.
Pada baris terakhir, saya menyisipkan kode program untuk mencoba mengakses
method beli_komputer() . Kode ini sengaja saya beri tanda komentar. Jika anda menghapus tanda
komentar, PHP akan mengeluarkan error yang menyatakan kita tidak bisa mengakses method dengan
hak akses protected.

<?
$gadget_baru->beli_komputer();
// Fatal error: Call to protected method komputer::beli_komputer()
?>

Inilah yang dimaksud dengan enkapsulasi dalam OOP. Membatasi method yang tidak boleh diakses
akan membuat kode program menjadi lebih terstruktur.

10.Cara Mengakses Property dan Method Parent Class


Konsep pewarisan/inheritance dimana sebuah class bisa
memiliki property dan method dari class lain, bisa menjadi permasalahan
ketika property atau method dari class anak memiliki nama yang sama dengan class induk,
atau dikenal dengan istilah overridden property dan overridden method.

Untuk memahami pengertian overridden property dan overridden method, perhatikan contoh kode
program berikut ini.
<?php
// buat class komputer
class komputer {

public function lihat_spec() {


return "Spec Komputer: Acer,
Processor Intel core i7, Ram 4GB";
}
}

// turunkan class komputer ke laptop


class laptop extends komputer {

public function lihat_spec() {


return "Spec Laptop: Asus,
Processor Intel core i5, Ram 2GB";
}
}
// buat objek dari class laptop (instansiasi)
$gadget_baru = new laptop();

//panggil method lihat_spec()


echo $gadget_baru->lihat_spec();
?>
Pada kode program diatas, saya membuat 2 buah class:
komputer dan laptop. Class komputer diturunkan kedalam class laptop, sehingga
seluruh property dan method dari class komputer bisa diakses dari class laptop.

Namun perhatikan bahwa method pada class komputer memiliki nama yang sama dengan method
dalam class laptop. Ketika kita memanggil method lihat_spec(), method manakah yang akan
dijalankan?
Berdasarkan hasil yang di dapat, terlihat bahwa method yang dijalankan
adalah method milik classlaptop.

Di dalam PHP, ketika nama property atau nama method child class memiliki nama yang
sama dengan parent class, maka yang dijalankan adalah property atau method milik child
class.

Jadi, bagaimana cara mengakses property dan method milik class komputer? PHP mengatasi
hal ini dengan menggunakan Scope Resolution Operator

Pengertian Scope Resolution Operator PHP


Scope Resolution Operator adalah operator khusus di dalam PHP yang memungkinkan kita untuk
mengakses informasi khusus dari dalam class.

Informasi khusus ini terdiri dari: overridden property atau overridden method, static
property atau static method, serta constanta class. Untuk saat ini, kita akan fokus kepada overridden
property atau overridden method. Mengenai static property, static method, dan konstanta class akan
kita bahas dalam tutorial lainnya

Scope Resolution Operator ditulis dengan tanda dua kali titik dua (double colon), yakni ::. Untuk
mengakses property dan method dari class induk, kita mengaksesnya dengan perintah:
parent::nama_property;
parent::nama_method();

Kembali kepada contoh program, kali ini kita ingin menampilkan


method lihat_spec() dari classkomputer:
<?php
// buat class komputer
class komputer {

public function lihat_spec() {


return "Spec Komputer: Acer,
Processor Intel core i7, Ram 4GB";
}
}

// turunkan class komputer ke laptop


class laptop extends komputer {

public function lihat_spec() {


return "Spec Laptop: Asus,
Processor Intel core i5, Ram 2GB";
}

public function lihat_spec_komputer() {


return parent::lihat_spec();
}
}
// buat objek dari class laptop (instansiasi)
$gadget_baru = new laptop();

//panggil method lihat_spec()


echo $gadget_baru->lihat_spec();
echo "<br />";

//panggil method lihat_spec_komputer()


echo $gadget_baru->lihat_spec_komputer();
?>
Kode program diatas adalah revisi dari contoh kita sebelumnya. Saya menambahkan sebuah method
lihat_spec_komputer() kedalam class laptop. Method ini selanjutkan akan
memanggil method class komputer, dengan perintah parent::lihat_spec().

Hasilnya adalah:
Spec Laptop: Asus, Processor Intel core i5, Ram 2GB
Spec Komputer: Acer, Processor Intel core i7, Ram 4GB

Contoh diatas adalah cara mengakses method parent class dari child class. Lalu bagaimana dengan
cara mengakses parent property dari child class? Jika anda berfikir sama seperti saya, maka kita bisa
tebak bahwa caranya adalah menggunakan parent::nama_property, apakah bisa? mari kita coba:
<?php
// buat class komputer
class komputer {

public $merk = "acer";

public function lihat_spec() {


return "Spec Komputer: Acer,
Processor Intel core i7, Ram 4GB";
}
}
// turunkan class komputer ke laptop
class laptop extends komputer {
public $merk = "asus";

public function lihat_spec() {


return "Spec Laptop: Asus,
Processor Intel core i5, Ram 2GB";
}

public function lihat_spec_komputer() {


return parent::lihat_spec();
}
public function lihat_merk_komputer() {
return parent::$merk;
}
}
// buat objek dari class laptop (instansiasi)
$gadget_baru = new laptop();

//panggil method lihat_spec()


echo $gadget_baru->lihat_spec();

echo "<br />";

//panggil method lihat_spec_komputer()


echo $gadget_baru->lihat_spec_komputer();

//panggil method lihat_merk_komputer()


echo $gadget_baru->lihat_merk_komputer();
?>
Dalam kode program diatas, saya menambahkan sebuah method baru: lihat_merk_komputer() yang
akan menjalankan perintah return parent::$merk. Jika kita menjalankan program diatas, hasilnya
adalah:
Spec Laptop: Asus, Processor Intel core i5, Ram 2GB
Spec Komputer: Acer, Processor Intel core i7, Ram 4GB
<b>Fatal error</b>: Access to undeclared static property: komputer::$merk

Apa yang terjadi?

Error diatas juga membuat saya bingung saat pertama kali mencobanya. Kode error diatas
berarti kita mencoba mengakses property static $merk dari class komputer, bukan property
public $merk dari class komputer sebagaimana kode error (Property static tidak sama dengan
property biasa, kita akan mempelajarinya sesaat lagi di: Pengertian static property dan static
method).

Pengertian static property belum kita pelajari sampai tutorial kali ini, dan akan saya bahas
lengkap pada tutorial tersendiri. Namun berdasarkan kode error tersebut dan membaca
beberapa sumber, saya mendapati bahwa kita tidak bisa mengakses property parent class
secara langsung.

Jadi, bagaimana caranya?

Yang perlu menjadi perhatian disini adalah bahwa kode kita disini memiliki nama method
dan property yang sama baik di child class dan juga pada parent class. Solusi yang paling
mudah adalah: tidak menggunakan nama property dan method yang sama. Dengan demikian,
kode program akan menjadi lebih jelas dan lebih mudah untuk dipahami.

11.Cara Mengakses Constructor dan Destructor Parent Class


Seperti yang telah kita pelajari dalam tutorial Tutorial Belajar OOP PHP: Pengertian
Constructor dan Destructor, construktor dan destructor adalah method khusus yang dijalankan secara
otomatis ketika sebuah class di instansiasi ke dalam sebuah objek, dan ketika objek tersebut dihapus.

Konsep inhertitance atau pewarisan class memiliki efek khusus dalam construktor dan destructor.
Terutama construktor dan destructor dari parent class.

Mari kita jelaskan dengan menggunakan contoh:

<?php
// buat class komputer
class komputer {

// buat constructor class komputer


public function __construct() {
echo "Constructor dari class komputer <br />";
}

// buat destructor class komputer


public function __destruct() {
echo "Destructor dari class komputer <br />";
}
}
// turunkan class komputer ke laptop
class laptop extends komputer {
}

// turunkan class laptop ke chromebook


class chromebook extends laptop {
}
// buat objek dari class chromebook (instansiasi)
$gadget_baru = new chromebook();

echo "Belajar OOP PHP <br />";


?>

Pada kode diatas, saya membuat class komputer


dengan construktor dan destructor. Classkomputer kemudian diturunkan kepada class laptop,
kemudian diturunkan kembali kepada classchromebook.

Baik class laptop maupun class chromebook tidak memiliki property maupun
method. Class chromebook inilah yang akan kita instansiasi kedalam objek $gadget_baru.

Ketika program itu dijalankan, berikut adalah hasil yang didapat:


Constuctor dari class komputer
Belajar OOP PHP
Destructor dari class komputer
Dari hasil tersebut terlihat bahwa constructor dan destructor class komputer tetap dijalankan
walaupun kita membuat objek dari class chromebook

Pengertian Overridden Constructor dan Overridden Destructor


Dalam kode program diatas, saya tidak
membuat constructor dan destructor untuk class laptop dan class chromebook. Tapi bagaimana jika
ketiga class ini juga memiliki constructor dan destructor? Mari kita coba:
<?php
// buat class komputer
class komputer {

// buat constructor class komputer


public function __construct() {
echo "Constructor dari class komputer <br />";
}

// buat destructor class komputer


public function __destruct() {
echo "Destructor dari class komputer <br />";
}
}

// turunkan class komputer ke laptop


class laptop extends komputer {

// buat constructor class laptop


public function __construct() {
echo "Constructor dari class laptop <br />";
}
// buat destructor class laptop
public function __destruct() {
echo "Destructor dari class laptop";
}
}

// turunkan class laptop ke chromebook


class chromebook extends laptop {

// buat constructor class chromebook


public function __construct() {
echo "Constructor dari class chromebook <br />";
}

// buat destructor class chromebook


public function __destruct() {
echo "Destructor dari class chromebook <br />";
}
}
// buat objek dari class chromebook (instansiasi)
$gadget_baru = new chromebook();

echo "Belajar OOP PHP <br />";


?>

Kode diatas memiliki constructor dan destructor pada masing-masing class, mari kita lihat hasilnya:
Constuctor dari class chromebook
Belajar OOP PHP
Destructor dari class chromebook

Kemana constructor dan destructor class lainnya? Di dalam PHP, ketika child
class memiliki constructor dan destructor sendiri, maka PHP akan
melewatkan constructor dan destructor parent class, kasus ini disebut dengan Overridden
Constructor dan Overridden Destructor.

Karena di dalam contoh kita class chromebook memiliki constructor dan destructor,
maka constructor dan destructor class induknya tidak dijalankan.

Bagaimana jika kita ingin constructor dan destructor parent class tetap dijalankan?
Solusinya, kita harus memanggil constructor dan destructor parent class secara manual
dengan Scope Resolution Operator, yakni: parent::__construct() dan parent::__desctruct().
Berikut adalah modifikasi kode program kita diatas:

<?php
// buat class komputer
class komputer {
public function __construct() {
echo "Constructor dari class komputer <br />";
}

public function __destruct() {


echo "Destructor dari class komputer <br />";
}
}

// turunkan class komputer ke laptop


class laptop extends komputer {
public function __construct() {
parent::__construct();
echo "Constructor dari class laptop <br />";
}

public function __destruct() {


echo "Destructor dari class laptop <br />";
parent::__destruct();
}
}

// turunkan class laptop ke chromebook


class chromebook extends laptop {
public function __construct() {
parent::__construct();
echo "Constructor dari class chromebook <br />";
}

public function __destruct() {


echo "Destructor dari class chromebook <br />";
parent::__destruct();
}
}

// buat objek dari class chromebook (instansiasi)


$gadget_baru = new chromebook();

echo "Belajar OOP PHP <br />";


?>

Hasil yang kita dapat adalah:


Constructor dari class komputer
Constructor dari class laptop
Constructor dari class chromebook
Belajar OOP PHP
Destructor dari class chromebook
Destructor dari class laptop
Destructor dari class komputer

Dengan memanggil manual perintah parent::__construct() dan parent::__desctruct(), kita bisa


menjalankan seluruh constructor dan destructor dari parent class.

12.Pengertian Static Property dan Static Method


Jika di awal tutorial Pemrograman objek PHP ini saya menjelaskan bahwa
seluruh property dan method hanya bisa diakses dari objek, maka static property dan static
method adalah pengecualiannya

Static property dan static method adalah property (variabel) dan method (function) yang melekat
kepada class, bukan kepada objek. Konsep static property memang agak keluar dari konsep objek
sebagai tempat melakukan proses, karena sebenarnya class hanya merupakan blueprint saja.
Untuk membuat static property dan static method, kita menambahkan keyword static setelah
penulisan akses level property atau method, seperti contoh berikut:
// static property
public static $harga_beli;

// static method
public static function beli_laptop() {
//...isi method
}
Dalam contoh diatas, saya menggunakan hak akses public, tetapi kita juga bisa menggunakan hak
akses lain seperti private dan protected untuk static property dan static method.

Karena static property dan static method adalah milik class, maka kita tidak perlu membuat objek
untuk mengaksesnya, tapi langsung menyebutkan nama class dan menggunakan operator ::, berikut
adalah contoh pengaksesan static property dan static method dari class laptop:

Tutorial Cara Penggunaan Static Property dan Static Method


Agar lebih memahami cara penggunaan static property dan static method, langsung saja kita masuk
ke dalam kode program:
<?php
// buat class laptop
class laptop {
public $merk;
public $pemilik;

// static property
public static $harga_beli;

//static method
public static function beli_laptop() {
return "Beli Laptop";
}
}

// set static property


laptop::$harga_beli=4000000;

// get static property


echo "harga beli : Rp".laptop::$harga_beli;

echo "<br />";

// panggil static method


echo laptop::beli_laptop();
?>
Dalam kode diatas, saya membuat class laptop dengan 2 property biasa, 1 static property dan
1 static method. Perhatikan cara mengkases keduanya tanpa membuat objek.

Cara Mengakses Static Property dan Static Method Dari Class Itu Sendiri
Jika kita menggunakan variabel $this untuk mengakses property dan method normal dari
dalam class, maka untuk mengakses static property dan static method, kita menggunakan
keyword self::. Berikut contoh penggunaannya:
<?php
// buat class laptop
class laptop {
public $merk;
public $pemilik;

// static property
public static $harga_beli;

//static method
public static function beli_laptop() {
return "Beli laptop seharga Rp".self::$harga_beli;
}
}

// set static property


laptop::$harga_beli=4000000;

// panggil static method


echo laptop::beli_laptop();
?>
Pada kode program PHP diatas, saya menggunakan perintah self::$harga_beli, untuk
memanggil static property dari dalam class laptop itu sendiri.

Cara Mengakses Static Property dan Static Method Parent Class


Untuk class dengan penurunan (inheritance), kita bisa
menggunakan keywordparent::nama_property dan parent::nama_method untuk
mengakses static property dan static method dari parent class.
Misalnya class laptop adalah turunan dari class komputer, kita bisa menggunakan
perintah parent::beli_komputer() untuk mengakses static method pada class komputer dari
dalam class laptop.

Berikut adalah contoh pengaksesan static method milik parent class:


<?php
// buat class komputer
class komputer {

// protected static method


protected static function beli_komputer(){
return "Beli Komputer Baru";
}
}

// turunkan class komputer ke class laptop


class laptop extends komputer{

// private static method


private static function beli_laptop(){
return "Beli Laptop Baru";
}
// public static method
public static function beli_semua(){
echo parent::beli_komputer();
echo "<br />";
echo self::beli_laptop();
}
}

// panggil static method


laptop::beli_semua();

// coba panggil private static method


// laptop::beli_laptop();
// Fatal error: Call to private method laptop::beli_laptop()
?>

Pada kode diatas, saya membuat class komputer dengan sebuah static method beli_komputer().
Method ini memiliki hak akses protected, sehingga hanya bisa diakses dari dalam class itu sendiri
atau dari dalam class turunan.

Class komputer kemudian diturunkan kepada class laptop. Di dalam class laptop, saya membuat dua
buah static method. Static method beli_laptop() di set dengan hak akses private, sehingga tidak bisa
diakses dari luar class laptop.

Dalam method beli_semua(), saya memanggil method beli_komputer() milik class


komputer menggunakan perintah parent::beli_komputer(). Ini adalah cara pemanggilan static
method milik parent class. Kemudian masih di dalam method beli_semua(), saya memanggil
method beli_laptop() dengan perintah self::beli_laptop(), karena method ini ada di dalam class leptop
itu sendiri.

Untuk menguji apakah method beli_semua() sukses dijalankan, saya kemudian memanggilnya dengan
perintah laptop::beli_semua().

Perhatikan juga pada bagian komentar di akhir kode diatas. Jika kita mencoba memanggil method
laptop::beli_laptop(), PHP akan mengeluarkan error karena method beli_laptop() memiliki hak
akses private, sehingga tidak bisa diakses dari luar class.

Dalam membuat program berbasis objek, penggunaan static property (dan juga static method)
sebaiknya dibatasi, karena static method cenderung susah dideteksi jika terjadi kesalahan. Namun
konsep property dan method yang melekat kepada class ini banyak juga digunakan untuk
membuat design pattern. Bahkan di dalam framework PHP seperti laravel, static method merupakan
mekanisme utama untuk menjalankan sebagian besar kode program.

13.Pengertian Konstanta Class dalam Pemrograman Objek


Konstanta Class atau class constant adalah konstanta yang berada di dalam class. Selain
memiliki property dan method, PHP juga membolehkan kita menggunakan konstanta (constant) di
dalam class.

Sebagaimana sifat konstanta reguler, class constant juga tidak bisa diubah nilainya ketika sudah
didefenisikan. Untuk membuat class constant di dalam PHP, kita menggunakan perintah: const.
Berikut adalah contoh kode program pembuatan constanta di dalam class:

class nama_class {

const NAMA_KONSTANTA = nilai_konstanta;

Penulisan nama konstanta dengan huruf besar bukan keharusan, namun lebih kepada kebiasaan
programmer PHP agar mudah dibedakan dengan variabel yang umumnya ditulis dengan huruf kecil.

Di dalam PHP, class constant seolah-olah berprilaku sebagai static property. Class constant juga
terikat kepada class, bukan objek. Oleh karena itu, untuk mengakses nilai konstanta, kita
menggunakan operator yang sama seperti static property

Jika kita memiliki class laptop dan konstanta MERK, maka cara mengaksesnya adalah sebagai
berikut:

laptop::MERK;

Cara Penulisan Konstanta Class dalam PHP


Untuk melihat cara penulisan dan penggunaan konstanta class, kita akan langsung menggunakan kode
program. Berikut adalah contoh class laptop dengan sebuah konstanta DOLLAR:

<?php

// buat class laptop

class laptop {

// buat konstanta

const DOLLAR = '12000';

// panggil konstanta class

echo "Harga dollar saat ini = Rp. ".laptop::DOLLAR;

// hasil: Harga dollar saat ini = Rp. 12000

?>

Perhatikan bahwa untuk mengakses class constant DOLLAR milik class laptop, kita menggunakan
perintah laptop::DOLLAR.
Selain mengakses konstanta dengan menggunakan nama class, PHP juga memiliki cara lain, yakni
dengan mengaksesnya dari objek. Fitur ini hanya bisa digunakan untuk PHP versi 5.3 keatas. Berikut
contohnya:

<?php

// buat class laptop

class laptop {

// buat konstanta

const DOLLAR = '12000';

// buat objek dari class laptop (instansiasi)

$laptop_baru = new laptop();

// panggil konstanta class

echo "Harga dollar saat ini = Rp ".$laptop_baru::DOLLAR;

// hasil: Harga dollar saat ini = Rp. 12000

?>

Dalam kode diatas, kita mengakses nilai kontanta class dari objek $laptop_baru menggunakan
perintah $laptop_baru::DOLLAR.

PHP versi 5.3 keatas juga membolehkan pemanggilan property dengan nama class yang berada di
dalam variabel. Berikut contohnya.

<?php

// buat class laptop

class laptop {

// buat konstanta

const DOLLAR = '12000';

}
// buat variabel dengan nama class

$nama = "laptop";

// panggil konstanta class

echo "Harga dollar saat ini = Rp. ".$nama::DOLLAR;

// hasil: Harga dollar saat ini = Rp. 12000

?>

ada kode program diatas, saya tidak menggunakan objek, tetapi membuat variabel $nama dan
memberikannya nilai laptop. Karena nama class kita juga adalah laptop, maka PHP membolehkan
pemanggilan kosntanta DOLLAR dengan $nama::DOLLAR. Nama variabel yang digunakan boleh
bebas, selama nilainya cocok dengan nama class tempat konstanta itu berada.

Cara Mengakses Konstanta Class dari dalam Class itu Sendiri


Untuk mengakses class constant dari dalam class itu sendiri, PHP menggunakan cara yang sama
dengan static property, yaitu dengan perintah self::nama_konstanta. Berikut contohnya:

<?php

// buat class laptop

class laptop {

// buat konstanta

const DOLLAR = '12000';

// buat method

public function beli_laptop($harga) {

return "Beli Komputer Baru, Rp. ".$harga*self::DOLLAR;

}
// buat objek dari class laptop (instansiasi)

$laptop_baru=new laptop();

echo $laptop_baru->beli_laptop(400);

// hasil: Beli Komputer Baru, Rp. 4800000

?>

Saya membuat class laptop dengan sebuah method beli_laptop(). Method beli_laptop() digunakan
untuk menghitung harga laptop dengan mengalikan konstanta class DOLLAR dengan
parameter $harga. Perhatikan bahwa kita mengakses class constant dengan perintah self::DOLLAR.

Cara Mengakses Konstanta Class milik Parent Class


Pewarisan class (class inheritance) dari sebuah class kedalam class lain, juga akan
menurunkan konstanta. Jika kebetulan class yang diturunkan (child class) memiliki
nama konstanta yang sama dengan parent class, konstanta tersebut akan tertimpa.

PHP menggunakan operator parent::nama_konstanta untuk mengakses konstanta milik parent class.

Agar lebih mudah, berikut adalah contoh kode program penggunaan


operator parent::nama_konstanta:

<?php

// buat class komputer

class komputer {

// buat konstanta class komputer

const DOLLAR = '11000';

// turunkan class komputer ke class laptop

class laptop extends komputer {

// buat konstanta class laptop

const DOLLAR = '12000';


// buat method dengan konstanta class komputer

public function beli_komputer($harga){

return "Beli Komputer Baru, Rp .".$harga*parent::DOLLAR;

// buat method dengan konstanta class laptop

public function beli_laptop($harga){

return "Beli Komputer Baru, Rp .".$harga*self::DOLLAR;

// buat objek dari class laptop (instansiasi)

$laptop_baru=new laptop();

echo $laptop_baru->beli_laptop(400);

echo "<br />";

echo $laptop_baru->beli_komputer(400);

?>

Saya membuat konstanta DOLLAR di dalam class komputer. Class komputer kemudian diturunkan
ke dalam class laptop. Di dalam class laptop, saya mendefenisikan kembali konstanta DOLLAR.
Karena kedua konstanta ini memiliki nama yang sama, maka saya harus menggunakan
perintah parent::DOLLAR untuk memanggil konstanta DOLLAR miliki class komputer.
14.Pengertian Final Method dan Final Class Pemrograman Objek
Dalam membuat desain class, kita sering menurunkan sebuah class kepada class lain,
atau yang dikenal dengan inheritance/pewarisan. Pemrograman objek juga membolehkan
kita untuk menimpa method milik parent class dengan method milik child class.
Proses menimpa method atau dikenal dengan istilah overridden method ini dilakukan dengan
cara membuat nama method yang sama dengan nama method yang ada di dalam parent class.

Bagaimana jika kita menginginkan sebuah mekanisme untuk melarang class anak untuk membuat
method yang akan menimpa method class induk? Atau bahkan melarang sebuah classuntuk
diturunkan sama sekali? Untuk keperluan ini, pemrograman objek PHP menggunakan keyword: final.

Dengan menambahkan keyword final kepada sebuah method, maka method tersebut tidak dapat
didefenisikan ulang di dalam child class. Dan jika sebuah class ditambahkan keyword final,
maka class tersebut tidak bisa diturunkan sama sekali. Inilah pengertian dari final method dan final
class.

Untuk membuat final method, kita tinggal menambahkan kata final sebelum keyword hak akses,
seperti berikut ini:
final public function nama_method(){
//... isi method
}

Cara Penggunaan Final Method dan Final Class dalam PHP


Untuk membahas cara menggunakan final method dan final class, pertama kali mari kita lihat
cara penulisan dan penggunaan final method dalam PHP.

Dalam contoh berikut, saya membuat class komputer dengan sebuah final method,
kemudian saya mencoba menimpa method ini dari class laptop:
<?php
class komputer{
final public function lihat_spec(){
return "Lihat Spesifikasi Komputer";
}
}

class laptop extends komputer{


public function lihat_spec(){
return "Lihat Spesifikasi Laptop";
}
}

$laptop_baru=new laptop();
// Fatal error: Cannot override final method
// komputer::lihat_spec()
?>
Pada kode program diatas, class komputer memiliki method lihat_spec() yang di-set
sebagai final. Kemudian class komputer ini saya turunkan kepada class laptop. Di
dalam class laptop, saya mendefenisikan ulang method lihat_spec(),
sehingga method lihat_spec() milik class komputer akan tertimpa oleh
method lihat_spec() milik class laptop.
Saat saya membuat objek $laptop_baru dari class laptop, PHP akan mengeluarkan
error: Cannot override final method komputer::lihat_spec(). Error ini menjelaskan
bahwa kita tidak bisa menimpa method lihat_spec() milik class komputer, karena
method tersebut telah di set sebagai final.
Jika sebuah final method tidak bisa ditimpa nilainya, maka sebuah final class tidak
bisa diturunkan kepada class lain. Sebagai contoh kedua kita, berikut adalah kode
PHP dimana saya mencoba menurunkan final class:
<?php
final class komputer{
function lihat_spec(){
return "Lihat Spesifikasi Komputer";
}
}

class laptop extends komputer{


}

$laptop_baru=new laptop();
// Fatal error: Class laptop may not inherit
// from final class (komputer)
?>
Saya membuat sebuah final class komputer, kemudian mencoba menurunkannya
kepada class laptop. Saat proses pembuatan objek: $laptop_baru=new laptop(),
PHP akan komplain dan mengeluarkan error: Fatal error: Class laptop may not
inherit from final class (komputer). Dari hasil error yang didapat, PHP melarang
kita untuk menurunkan class komputer, karena telah di set sebagai final class.
<?php
class komputer {
final $merk;
}

$laptop_baru=new komputer();
// Fatal error: Cannot declare property komputer::$merk final,
// the final modifier is allowed only for methods and classes
?>
Dari hasil error yang didapat, ternyata PHP memang tidak mendukung final
property :).
Final method dan final class bisa digunakan untuk membuat desain class yang terstruktur.
Dalam tutorial OOP PHP selanjutnya, kita akan membahas tentang Pengertian Abstract Class
dan Abstract Method dalam Pemrograman Objek PHP.
15.Pengertian Abstract Class dan Abstract Method PHP

Abstract Class adalah sebuah class yang tidak bisa di-instansiasi (tidak bisa dibuat menjadi
objek) dan berperan sebagai kerangka dasar bagi class turunannya. Di dalam abstract
class umumnya akan memiliki abstract method. Abstract Method adalah sebuah method dasar
yang harus diimplementasikan ulang di dalam class anak (child class). Abstract method ditulis tanpa
isi dari method, melainkan hanya signature-nya saja. Signature dari sebuah method adalah bagian
method yang terdiri dari nama method dan parameternya (jika ada).

Abstract class digunakan di dalam inheritance (pewarisan class) untuk memaksakan implementasi
method yang sama bagi seluruh class yang diturunkan dari abstract class. Abstract class digunakan
untuk membuat struktur logika penurunan di dalam pemrograman objek.

Konsep abstract class dan abstract method akan lebih mudah dipahami dengan menggunakan contoh.
Misalkan kita ingin membuat class yang terdiri dari berbagai jenis komputer seperti class
laptop, class PC, class netbook, dan lain-lain. Seluruh class ini tentunya memiliki sifat-sifat komputer,
seperti memiliki spesifikasi, memiliki processor, dan membutuhkan listrik. Dalam implementasinya,
kita bisa membuat seluruh class ini diturunkan dari class komputer.

Agar lebih seragam, kita ingin seluruh class yang diturunkan dari class komputer, memiliki method
yang pasti ada dalam setiap class anak. Setiap komputer tentunya memiliki spesifikasi, sehingga kita
ingin setiap class yang diturunkan dari class komputer memiliki method lihat_spec().

Bagaimana caranya memaksa setiap class agar memiliki method lihat_spec()? Untuk
kebutuhan ini, kita bisa membuat class komputer sebagai abstract class, dan
method lihat_spec() sebagai abstract method.

Lebih lanjut, abstract method tidak hanya membuat setiap class memiliki
method lihat_spec(), tetapi memaksa setiap method mengimplementasikan
method lihat_spec() dengan isi method di serahkan kepada masing-masing class. Tentunya
spesifikasi class laptop akan berbeda dengan spesifikasi class PC.

Abstract class memiliki aturan yang membedakannya dengan class biasa. Kita akan
membahas aturan-aturan tersebut dengan menggunakan contoh program PHP.

berikut adalah cara penulisannya di dalam PHP:


<?php
abstract class komputer {
// isi dari class komputer
}
?>
Untuk membuat abstract class di dalam PHP, kita tinggal menambahkan keyword abstract sebelum
nama class. Sebuah abstract class bisa memiliki property dan method biasa layaknya sebuah class
normal, namun juga bisa memiliki abstract method.

Jika sebuah method dinyatakan sebagai abstract method, maka kita tidak perlu membuat isi
methodnya, tetapi hanya signature dari method tersebut. Signature terdiri dai nama method dan
parameternya (jika ada) seperti contoh berikut:
abstract public function lihat_spec();
abstract public function
lihat_spec($merk);
Kenapa kita tidak perlu membuat isi dari method? Ini karena jika sebuah method dinyatakan
sebagai abstract method, isi dari method tersebut akan dibuat dalam class turunan. Abstract
method harus berada di dalam abstract class.

Sebagai contoh, berikut adalah cara penulisan abstract method lihat_spec() di dalam abstract
classkomputer:
<?php
abstract class komputer {
abstract public function lihat_spec();
}
?>

Abstract Class Tidak Bisa Diinstansiasi


Sesuai dengan sifatnya, kita tidak bisa membuat objek dari abstract class. Abstract class digunakan
hanya sebagai blueprint untuk class-class lain, bukan untuk digunakan langsung.
abstract class komputer {
abstract public function lihat_spec($pemilik);
}
}

$komputer_baru=new komputer();
// Fatal error: Cannot instantiate abstract class komputer
?>
Error diatas terjadi karena kita mencoba membuat objek dari abstract class. Untuk menggunakan
class komputer, kita harus menurunkannya kepada class lain.

Abstract Class Bisa Memiliki Property dan Method biasa


Jika sebuah class dinyatakan sebagai abstract class, class tersebut juga bisa
memiliki property dan method normal. Namun kita hanya bisa mengakses property dan method ini
dari class turunan, karena abstract class tidak bisa diinstansiasi.
<?php
// buat abstract class
abstract class komputer{

// buat abstract method


abstract public function lihat_spec($pemilik);

// buat method biasa


public function hidupkan_komputer(){
echo "Hidupkan Komputer";
}
}
?>

Class Turunan Harus Mengimplementasikan Abstract Method


Jika sebuah class diturunkan dari abstract class, maka class tersebut harus membuat ulang seluruh
abstract method yang terdapat dalam abstract class, dan juga harus sesuai dengan signature-nya.
<?php
// buat abstract class
abstract class komputer{
// buat abstract method
abstract public function lihat_spec();
}

class laptop extends komputer{


public function beli_laptop(){
return "Beli Laptop...";
}
}

// buat objek dari class laptop


$laptop_baru = new laptop();

// Fatal error: Class laptop contains 1 abstract method


// and must therefore be declared abstract or implement
// the remaining methods (komputer::lihat_spec)
?>

Dalam contoh diatas, saya menurunkan class komputer kepada class laptop. Karena class
komputer adalah abstract class dan memiliki abstract method lihat_spec(), maka di dalam class
laptop kita harus membuat ulang method lihat_spec(). Jika tidak, akan terjadi kode error seperti
diatas. Untuk mengatasinya, mari kita revisi kode diatas menjadi berikut ini :
<?php
// buat abstract class
abstract class komputer{
// buat abstract method
abstract public function lihat_spec();
}

class laptop extends komputer{

// implementasi abstract method


public function lihat_spec(){
return "Lihat Spec Laptop...";
}

// method 'biasa'
public function beli_laptop(){
return "Beli Laptop...";
}
}

// buat objek dari class laptop


$laptop_baru = new laptop();
echo $laptop_baru->lihat_spec();
// Lihat Spec Laptop...

echo "<br />";

echo $laptop_baru->beli_laptop();
// Beli Laptop...
?>

Dalam kode diatas, method lihat_spec() telah kita implementasikan di dalam class laptop. Fitur inilah
yang menjadi fungsi dari abstract method, yakni memaksa setiap class turunan untuk
memiliki method lihat_spec().
Implementasi dari abstract method, juga harus sesuai dengan signaturenya, yakni nama
method beserta parameter. Jika kita membuat abstract method lihat_spec($merk), maka di dalam
class turunan, kita juga harus membuat $merk sebagai parameter method. Jika tidak, maka PHP akan
menghasilkan error sebagai berikut:
<?php
// buat abstract class
abstract class komputer{
// buat abstract method
abstract public function lihat_spec($pemilik);
}

class laptop extends komputer{


public function lihat_spec(){
return "Lihat Spec Laptop...";
}
}

// buat objek dari class laptop


$laptop_baru = new laptop();

// Fatal error: Declaration of laptop::lihat_spec()


// must be compatible with komputer::lihat_spec($pemilik)
?>

Abstract Class Bisa Memiliki Static Method


Salah satu fitur khusus untuk abstract class di dalam PHP, adalah: abstract class bisa
memiliki static method. Berikut contohnya:
<?php
// buat abstract class
abstract class komputer{
// buat abstract method
abstract public function lihat_spec($pemilik);

public static function hidupkan_komputer(){


echo "Hidupkan Komputer";

}
}

echo komputer::hidupkan_komputer();
// Hidupkan Komputer
?>

Fungsi Abstract Class dan Abstract Method


Abstract class dan abstract method berfungsi untuk membuat kerangka bagi seluruh class
dibawahnya. Seperti contoh-contoh kita diatas, setiap class yang diturunkan dari class komputer,
pasti akan memiliki method lihat_spec().
Dalam tutorial ini saya menyederhanakan contoh kode program dengan hanya 1 abstract method. Kita
bisa membuat beberapa abstract method di dalam abstract class, seperti contoh berikut:
<?php
// buat abstract class
abstract class komputer{
// buat abstract method
abstract public function lihat_spec();
abstract public function lihat_processor();
abstract public function lihat_harddisk();
abstract public function lihat_pemilik();
}

class laptop extends komputer{


// .. isi class laptop
}

class pc extends komputer{


// .. isi class pc
}

class netbook extends komputer{


// .. isi class netbook
}
?>

Dengan membuat class komputer sebagai abstract, maka kita bisa menebak bahwa di dalam class
laptop, class pc dan class netbook, pasti memiliki method lihat_spec(), lihat_processor(),
lihat_harddisk() dan lihat_pemilik(). Dengan demikian, kita bisa membuat program yang lebih
terstruktur.

16.Pengertian Object Interface Dalam Pemrograman Berbasis Objek

Pengertian Object Interface


Secara sederhana, Object Interface adalah sebuah kontrak atau perjanjian implementasi method.
Bagi class yang menggunakan object interface, class tersebut harus mengimplementasikan ulang
seluruh method yang ada di dalam interface. Dalam pemrograman objek, penyebutan object
interface sering disingkan dengan Interface saja.

Jika anda telah mempelajari abstract class, maka interface bisa dikatakan sebagai bentuk lain
dari abstract class. Walaupun secara konsep teoritis dan tujuan penggunaannya berbeda.

Sama seperti abstract class, interface juga hanya berisi signature dari method, yakni hanya
nama method dan parameternya saja (jika ada). Isi dari method akan dibuat ulang di dalam class yang
menggunakan interface.

Jika kita menganggap abstract class sebagai kerangka atau blue print dari class-class lain,
maka interface adalah implementasi method yang harus tersedia dalam sebuah objek. Interface tidak
bisa disebut sebagai kerangka class.

Menyambung analogi kita tentang class komputer, interface bisa dicontohkan dengan mouse, atau
keyboard. Di dalam interface mouse, kita bisa membuat method seperti klik_kiri(),
klik_kanan(), dan double_klik(). Jika class laptop menggunakan interface mouse, maka class tersebut
harus membuat ulang method klik_kiri(), klik_kanan(), dan double_klik().
Untuk membuat Interface di dalam PHP, kita menulisnya mirip seperti membuat class, tetapi
menggunakan keyword interface, seperti contoh berikut:
<?php
interface mouse
{
//...isi dari interface mouse
}
?>

Isi dari interface adalah signature method (nama dan parameter method):
<?php
interface mouse{
public function klik_kanan();
public function klik_kiri();
public function scroll();
public function double_klik();
}
?>

Untuk menggunakan method kedalam class, kita menggunakan keyword implements, seperti contoh
berikut:
<?php
interface mouse{
public function klik_kanan();
public function klik_kiri();
}

class laptop implements mouse{


//... isi dari class laptop
}

class pc implements mouse{


//... isi dari class pc
}
?>

Interface adalah perjanjian method, dimana jika sebuah class menggunakan interface, maka di
dalam class tersebut harus tersedia implementasi dari method tersebut.

Jika di dalam interface mouse terdapat signature method klik_kanan(), maka di dalam class laptop
yang menggunakan interface mouse, harus terdapat method klik_kanan(). Berikut contoh kode
PHPnya:
<?php
interface mouse{
public function klik_kanan();
public function klik_kiri();
}

class laptop implements mouse{


public function klik_kanan(){
return "Klik Kanan...";
}
public function klik_kiri(){
return "Klik Kiri...";
}
}
$laptop_baru = new laptop();
echo $laptop_baru->klik_kanan();
// Klik Kanan...
?>

Apabila kita tidak membuat ulang salah satu method yang ada di interface, PHP akan
mengeluarkan error :
<?php
interface mouse{
public function klik_kanan();
public function klik_kiri();
}

class laptop implements mouse{


public function klik_kanan(){
return "Klik Kanan...";
}
}

$laptop_baru = new laptop();


// Fatal error: Class laptop contains 1 abstract method
// and must therefore be declared abstract
// or implement the remaining methods (mouse::klik_kiri)
?>

Method Interface Harus di set Sebagai Public


Sesuai dengan tujuannya untuk membuat interface/antar muka bagi class, method di dalam
perancangan interface harus memiliki hak akses public, atau tidak ditulis sama sekali (dimana PHP
akan menganggapnya sebagai public). Jika kita mengubah hak akses method di
dalam interface menjadi private atau protected, PHP akan mengeluarkan error:
<?php
interface mouse{
public function klik_kanan();
protected function klik_kiri();
}

class laptop implements mouse{


public function klik_kanan(){
return "Klik Kanan...";
}
public function klik_kiri(){
return "Klik Kiri...";
}
}

$laptop_baru = new laptop();


// Fatal error: Access type for interface
// method mouse::klik_kiri() must be omitted
?>

Di dalam class yang menggunakan interface, method yang berasal dari interface juga harus memiliki
hak akses public. Kita tidak bisa mengubahnya menjadi protected atau private
<?php
interface mouse{
public function klik_kanan();
public function klik_kiri();
}

class laptop implements mouse{


public function klik_kanan(){
return "Klik Kanan...";
}

protected function klik_kiri(){


return "Klik Kiri...";
}
}

$laptop_baru = new laptop();


// Fatal error: Access level to laptop::klik_kiri()
// must be public (as in class mouse)
?>
Dalam contoh diatas, saya mengubah hak akses method klik_kiri() menjadi protected di dalam class
laptop. Hal ini akan menghasilkan error.

Interface bisa di Turunkan (Inherit)


Di dalam PHP, interface bisa diturunkan kedalam interface lain. Prosesnya mirip dengan
penurunan class, yakni dengan menggunakan kata kunci extends:
<?php
interface mouse{
public function klik_kanan();
public function klik_kiri();
}

interface mouse_gaming extends mouse{


public function ubah_dpi();
}

class laptop implements mouse_gaming{


public function klik_kanan(){
return "Klik Kanan...";
}

public function klik_kiri(){


return "Klik Kiri...";
}

public function ubah_dpi(){


return "Ubah settingan DPI mouse";
}
}

$laptop_baru = new laptop();


echo $laptop_baru->ubah_dpi();
// Ubah settingan DPI mouse
?>
Interface Bisa Memiliki Konstanta
Dalam PHP, Interface bisa memiliki konstanta . Berikut adalah contoh penggunaan konstanta di
dalam interface:
<?php
interface mouse{
const JENIS = "Laser Mouse";
public function klik_kanan();
public function klik_kiri();
}

echo mouse::JENIS;
// Laser Mouse
?>
Untuk mengakses konstanta dari interface, kita menggunakan perintah
nama_interface::nama_konstanta.

Interface Tidak Bisa Memiliki Method normal


Salah satu yang membedakan interface dengan abstract class adalah kita tidak bisa membuat method
biasa di dalam Interface. Contoh berikut akan menghasilkan error:
<?php
interface mouse{
public function klik_kanan();
public function klik_kiri(){
return "Klik Kiri...";
}
}

class laptop implements mouse{


public function klik_kanan(){
return "Klik Kanan...";
}
}

$laptop_baru = new laptop();


// Fatal error: Interface function
// mouse::klik_kiri() cannot contain body
?>

Sebuah Class Bisa Menggunakan Banyak Interface


Perbedaan lain antara Interface dengan Abstract Class adalah: Sebuah class bisa menggunakan lebih
dari 1 interface, sedangkan untuk abstract class, kita hanya bisa menggunakan 1 abstract class dalam
sekali penurunan class.

Untuk menggunakan lebih dari 1 interface, kita tinggal menuliskan semua interface setelah
keyword implements. Setiap nama interface dipisahkan dengan tanda koma. Berikut contoh
penggunaan 2 buah interface di dalam PHP.

<?php
interface mouse{
public function klik_kanan();
public function klik_kiri();
}
interface keyboard{
public function tekan_enter();
}

class laptop implements mouse, keyboard{


public function klik_kanan(){
return "Klik Kanan...";
}

public function klik_kiri(){


return "Klik Kiri...";
}

public function tekan_enter(){


return "Tekan Tombol Enter...";
}
}

$laptop_baru = new laptop();


echo $laptop_baru->tekan_enter();
// Tekan Tombol Enter...
?>
Dalam contoh diatas saya membuat dua buah interface, yakni mouse dan keyboard.
Kedua interface ini kemudian digunakan oleh class laptop.

Fungsi Interface dalam Pemrograman Objek


Jika anda telah mempelajari abstract class dalam tutorial kita sebelumnya, sedikit banyak kita
bisa memahami fungsi interface jika dibandingkan dengan fungsi abstract class. Kedua
konsep ini sering membuat bingung karena mirip dalam implementasinya.
Interface lebih berperan untuk menyeragamkan method. Ia tidak masuk kedalam struktur
class seperti abstract class. Jika kita menggunakan abstract class komputer sebagai konsep
class untuk kemudian diturunkan kepada class lain seperti class laptop, class pc, dan class
netbook, maka interface hanya penyedia method. Interface tidak termasuk kedalam
pewarisan class.

17.Pengertian Polimorfisme dalam Pemrograman Objek PHP


Dari segi bahasa, Polimorfisme (bahasa inggris: Polymorphism) berasal dari dua kata bahasa
latin yakni poly dan morph.
Poly berarti banyak, dan morph berarti bentuk. Polimorfisme berarti banyak bentuk
Di dalam pemrograman objek, polimorfisme adalah konsep dimana terdapat banyak class
yang memiliki signature method yang sama. Implementasi dari method-method tersebut
diserahkan kepada tiap class, akan tetapi cara pemanggilan method harus sama. Agar kita
dapat memaksakan signature method yang sama pada banyak class, class tersebut harus
diturunkan dari sebuah abstract class atau object interface.
Sebagai contoh, berikut adalah kode PHP yang mengimplementasikan
konsep polimorfisme:
<?php
// buat abstract class
abstract class komputer{
// buat abstract method
abstract public function booting_os();
}

class laptop extends komputer{


public function booting_os(){
return "Proses Booting Sistem Operasi Laptop";
}
}

class pc extends komputer{


public function booting_os(){
return "Proses Booting Sistem Operasi PC";
}
}

class chromebook extends komputer{


public function booting_os(){
return "Proses Booting Sistem Operasi Chromebook";
}
}

// buat objek dari class diatas


$laptop_baru = new laptop();
$pc_baru = new pc();
$chromebook_baru = new chromebook();

// buat fungsi untuk memproses objek


function booting_os_komputer($objek_komputer){
return $objek_komputer->booting_os();
}

// jalankan fungsi
echo booting_os_komputer($laptop_baru);
echo "<br />";
echo booting_os_komputer($pc_baru);
echo "<br />";
echo booting_os_komputer($chromebook_baru);
?>
Contoh kode diatas cukup panjang, namun jika anda mengikuti tutorial OOP PHP
sebelumnya (tentang abstract class), maka kode diatas akan bisa dipahami dengan baik.
Pada awal program, saya membuat abstract class komputer yang kemudian diturunkan
kedalam 3 class lain, yakni: class laptop, class pc dan class chromebook. Abstract
class komputer memiliki abstract
method booting_os(), yang harus diimplementasikan ulang pada tiap class yang diturunkan
dari class komputer. Setelah pendefenisian class, saya membuat 3 objek dari masing-masing
class.
Perhatikan bahwa setelah pembuatan objek dari masing-masing class, saya membuat
fungsi booting_os_komputer(). Fungsi ini berperan untuk memanggil method-method dari
setiap class.
Konsep polimorfisme dari contoh diatas adalah, fungsi booting_os_komputer() akan selalu
berhasil dijalankan, selama argumen yang diberikan berasal dari class yang diturunkan
dari class abstract komputer.

Peran Abstract Class dan Interface dalam Polimorfisme


Baik abstract class maupun interface bisa digunakan untuk membuat banyak class dengan
method yang sama. Bahkan keduanya sering digunakan secara bersama-sama
Berikut adalah revisi kode program kita sebelumnya dengan menggunakan abstract
class dan interface:
<?php
// buat abstract class
abstract class komputer{
// buat abstract method
abstract public function booting_os();
}

interface mouse{
public function double_klik();
}

class laptop extends komputer implements mouse{


public function booting_os(){
return "Proses Booting Sistem Operasi Laptop";
}
public function double_klik(){
return "Double Klik Mouse Laptop";
}
}

class pc extends komputer implements mouse{


public function booting_os(){
return "Proses Booting Sistem Operasi PC";
}
public function double_klik(){
return "Double Klik Mouse PC";
}
}

class chromebook extends komputer implements mouse{


public function booting_os(){
return "Proses Booting Sistem Operasi Chromebook";
}
public function double_klik(){
return "Double Klik Mouse Chromebook";
}
}

// buat objek dari class diatas


$laptop_baru = new laptop();
$pc_baru = new pc();
$chromebook_baru = new chromebook();

// buat fungsi untuk memproses objek


function booting_os_komputer($objek_komputer){
return $objek_komputer->booting_os();
}

function double_klik_komputer($objek_komputer){
return $objek_komputer->double_klik();
}

// jalankan fungsi
echo booting_os_komputer($laptop_baru);
echo "<br />";
echo double_klik_komputer($laptop_baru);
echo "<br />";
echo "<br />";

echo booting_os_komputer($pc_baru);
echo "<br />";
echo double_klik_komputer($pc_baru);
echo "<br />";
echo "<br />";

echo booting_os_komputer($chromebook_baru);
echo "<br />";
echo double_klik_komputer($chromebook_baru);
?>

Pada kode program diatas, saya membuat 1 abstract class: komputer, dan 1 interface: mouse.
Keduanya kemudian di turunkan kepada 3 class: class laptop, class pc, dan class
chromebook.
Selama sebuah class diturunkan dari abstract class komputer, dan menggunakan interface
mouse, fungsi booting_os_komputer() dan fungsi double_klik_komputer() akan selalu
berhasil di jalankan, terlepas dari apapun nama objek dan implementasi method yang
digunakan
Konsep polimorfisme yang kita bahas dalam tutorial ini bertujuan untuk membuat struktur
pola dari class dan turunannya. Lebih jauh lagi, polimorfisme menekankan alur kode program
yang terorganisir untuk mengurangi adanya perulangan kode program

Anda mungkin juga menyukai