1. OOP
Dalam OOP, sebuah class merupakan blueprint dari suatu objek, perbedaan class dengan function?..
sebuah class bisa berisi variable dan function.
– Variabel = Property
– Function = Method
2. MEMBUAT CLASS
Contoh membuat class buku :
1 2 3 4 5 6 7 8 |
<?php class buku { var $judulBuku; //property var $pengarang; //property var $penerbit; //property var $tahun; //property } ?> |
3. MEMBUAT FUNCTION / METHOD DALAM CLASS
sebuah function dalam class disebut method, dan sebuah method jika kita bayangkan adalah segala hal terkait dengan pekerjaan atau proses yang dapat diberikan pada suatu objek.
Contoh class kendaraan dengan fungsi status harga jika harga diatas 50000000 = mahal. :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } } ?> |
Contoh class kendaraan, ditambahkan property tahun pembuatan, menambahkan function dapatSubsidi() dan hargaSecond().
dapatSubsidi() = Jika berbahan bakar premium dan tahun pembuatannya sebelum 2005.
hargaSecond() = Jika tahun pembuatan diatas 2005, maka harga second turun 20% dari harga asli. Jika tahun pembuatan 2000 s/d 2005, maka harga secondnya turun
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; var $tahunPembuatan; function dapatSubsidi() { if ($this->bahanBakar = 'Premium') && ($this->tahunPembuatan < 2005) $subsidi = 'Dapat'; else $subsidi = 'Tidak Dapat'; return $subsidi; } function hargaSecond() { if ($this->tahunPembuatan > 2005) $second = $this->harga * 20/100; else if ($this->tahunPembuatan >= 2005) $second = $this->harga * 30/100; else ($this->tahunPembuatan <= 2000) $second = $this->harga * 40/100; return $second; } } ?> |
4. INSTANTISASI OBJEK
Sebuah class merupakan blueprint dari Objek. Sebuah class belum menjadi objek sebelum kita lakukan sebuah proses instatisasi objek.
Untuk melakukan instantisasi objek, perintahnya adalah sbb :
1 |
$handle new namaclass(); |
Jika script dijalankan maka tidak akan muncul apa2. Hal ini terjadi karena belum menyuruh PHP melakukan sesuatu pada $kendaraan1
Variabel $kendaraan1 dalam hal ini dinamakan “handle” karena akan digunakan $kendaraan1 untuk mengontrol dan menggunakan objek kendaraan.
Bisa juga melakukan instantisasi objek tanpa menggunakan kurung.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class kendaraan() { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } } $kendaraan1 = new kendaraan(); $kendaraan2 = new kendaraan; // tanpa tanda kurung $kendaraan3 = new kendaraan(); ?> |
5. SETTING PROPERTIES
Setelah suatu objek di instantisasi, selanjutnya kita bisa setting properties dari objek tersebut.
Contoh, misalkan kita telah membuat objek $kendaraan1, kemudian bagaimana men-set properti harga dan merek dan merek dari objek $kendaraan1 ini?.
Cara men-setting properties dari suatu objek dengan perintah :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal' else $status = 'Murah'; return $status; } } $kendaraan1 = new kendaraan(); $kendaraan1->merek = 'Honda Supra'; $kendaraan1->harga = 23000000; ?> |
Perintah :
1 |
$kendaraan1->merek = 'Honda Supra'; |
Digunakan untuk mensetting properti merek ‘Honda Supra’ dari objek $kendaraan1.
Kita juga bisa menggunakan method untuk proses setting properti ini, dan ini adalah cara yang lebih di rekomendasikan dalam OOP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal' else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } } $kendaraan1 = new kendaraan(); $kendaraan1->setMerek = 'Honda Supra'; $kendaraan1->setHarga = 23000000; ?> |
Latihan :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal' else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } function setRoda($x) { $this->jumlahRoda = $x; } function setWarna($x) { $this->warna = $x; } function setbahanBakar($x) { $this->bahanBakar = $x; } } $kendaraan1 = new kendaraan(); $kendaraan1->setMerek = 'Honda Supra'; $kendaraan1->setHarga = 23000000; $kendaraan2 = new kendaraan(); $kendaraan2->setMerek = 'Toyota Yaris'; $kendaraan2->setRoda = 4; $kendaraan2->setHarga = 160000000; $kendaraan2->setWarna = 'Merah'; $kendaraan2->setbahanBakar = 'Premium'; $kendaraan3 = new kendaraan(); $kendaraan3->setMerek = 'Honda Yaris'; $kendaraan3->setRoda = 2; $kendaraan3->setHarga = 13000000; $kendaraan3->setWarna = 'Putih'; $kendaraan3->setbahanBakar = 'Premium'; $kendaraan4 = new kendaraan(); $kendaraan4->setMerek = 'Toyota Yaris'; $kendaraan4->setRoda = 4; $kendaraan4->setHarga = 170000000; $kendaraan4->setWarna = 'Hitam'; $kendaraan4->setbahanBakar = 'Solar'; ?> |
6. MENJALANKAN METHOD
Dalam bagian ini, cara menjalankan sebuah method dari suatu objek.
Menjalankan sebuah method dari suatu objek pada intinya adalah memanggil function yg didalam class.
Sebenarnya, dalam contoh sebelumnya sudah diberikan contoh untuk menjalankan method yaitu salah satunya melalui perintah
1 |
$kendaraan1->setMerek('Yamaha MIO'); |
Perintah tersebut adalah menjalankan method setMerek() dari objek $kendaraan1, dan dalam hal ini setMerek() adalah sebuah function dalam class kendaraan.
Contoh lain, kita akan menjalankan method statusHarga() yang digunakan untuk menampilkan status harganya apakah termasuk mahal atau murah.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } } $kendaraan1 = new kendaraan(); $kendaraan1->setMerek('Yamaha MIO'); $kendaraan1->setHarga(10000000); echo $kendaraan1->statusHarga(); ?> |
Jika script dijalankan, maka akan muncul ‘Murah’. Karena harganya kurang dari 50.000.000.
Perhatikan dari beberapa contoh pemanggilan method di atas, bahwa setiap kali pemanggilan method jalan lupa memberikan tanda kurung (), seperti :
1 |
$kendaraan1->setHarga(10000000); |
atau
1 |
$kendaraan1->setHarga(); |
karena kurung tersebut digunakan untuk meletakan parameter bagi method tersebut.
7. MENGAKSES PROPERTIES
sekarang akan dijelaskan bagaimana cara mengakses properties dari suatu objek. Sebelumnya pernah di bahas, bahwa properties dari suatu objek itu merupakan value dari variabel yang ada didalam class.
Bagaimana cara mengakses suatu properties dari suatu objek?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } } $kendaraan1 = new kendaraan(); $kendaraan1->setMerek('Yamaha MIO'); $kendaraan1->setHarga(10000000); echo 'Harga dari '.$kendaraan1->merek. ' adalah Rp. '.$kendaraan1->harga; ?> |
Perhatikan pada bagian perintah
$kendaraan1->harga
dan
$kendaraan1->merek
Kedua perintah di atas adalah digunakan untuk mengakses value dari property objek $kendaraan1,
yaitu ‘merek’ dan ‘harga’. Jika script diatas dijalankan maka akan diperoleh output
“Harga dari Yamaha MIO adalah Rp. 10000000″
Selain cara diatas, dapat pula menggunakan method dalam membaca properties dari suatu objek dan cara inilah yang paling disarankan dalam OOP. Perhatikan contoh berikut ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; $return; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } function bacaMerek($x) { return $this->merek; } function bacaHarga($x) { return $this->harga; } } $kendaraan1 = new kendaraan(); $kendaraan1->setMerek('Yamaha MIO'); $kendaraan1->setHarga('10000000'); echo 'Harga dari '.$kendaraan1->bacaMerek().' adalah Rp. '.$kendaraan1->bacaHarga(); ?> |
Dalam contoh di atas, untuk mengakses properti merek dibuat function sbb
function bacaMerek() {
return $this->merek;
}
Sedangkan function untuk mengakses properti harga kendaraan adalah
function bacaHarga() {
return $this->harga;
}
Selanjutnya untuk mengakses properti nama merek kendaraan, cukup dipanggil saja method bacaMerek() sbb:
$kendaraan1->bacaMerek()
Demikian pula untuk mengakses properti harga kendaraan melalui method bacaHarga();
$kendaraan1->bacaHarga()
8. MODULARITAS CLASS
Pada contoh2 script di atas, class dan juga proses instantisasi dijadikan satu dalam sebiah script.
Hal ini dirasa kurang efektif apabila class tersebut juga digunakan dalam script yang lain nantinya.
Sehingga untuk alasan kemudahan penggunaan, biasanya sebuah class atau kumpulan class diletakan dalam
sebuah script tersendiri, yang selanjutnya tinggal di include kan dalam sebuah script apabila class
tersebut akan digunakan. Dengan demikian kita tidak perlu menulis kembali isi class secara penuh dalam setiap scriptnya.
Sebagai contoh, perhatikan kembali contoh script yg berbentuk sbb :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } function bacaMerek() { return $this->merek; } function bacaHarga() { return $this->harga; } } $kendaraan1 = new kendaraan(); $kendaraan1->setMerek('Yamaha MIO'); $kendaraan1->setHarga('10000000'); echo 'Harga dari '.$kendaraan1->bacaMerek() .' adalah Rp. '.$kendaraan1->bacaHarga(); ?> |
Kita dapat memisahkan class ‘kendaraan’ ini dalam file tersendiri misalkan diberinama ‘class-kendaraan.php’ yang isinya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } function bacaMerek() { return $this->merek; } function bacaHarga() { return $this->harga; } } ?> |
Selanjutnya kita include kan file class-kendaraan.php ini ke dalam script lain apabila kita memerlukannya.
contoh.php
1 2 3 4 5 6 7 8 |
<?php include 'class-kendaraan.php'; $kendaraan1 = new kendaraan(); $kendaraan1->setMerek('Yahama MIO'); $kendaraan1->setHarga(10000000); echo 'Harga dari '.$kendaraan1->bacaMerek().' adalah Rp. '.$kendaraan1->bacaHarga(); ?> |
9. CONSTRUCTOR
Jika perhatikan kembali proses Instantisasi dan setting properties ini dilakukan secara terpisah. Tentu saja proses ini agak bertele-tele.
Ternyata kita bisa langsung melakukan instantisasi objek sekaligus melakukan setting propertiesnya.
Proses ini dapat dilakukan dengan menggunakan ‘constructor’.
Untuk membuat constructor, kita cukup membuat sebuah function class dengan bentuk
1 2 3 4 5 |
function __construct (parameter) { . . . } |
Keterangan: Tanda __ merupakan tanda underscore (_) yg ditulis double.
Berikut ini contoh constructor untuk objek kendaraan, dimana sekaligus mensetting properti ‘merek’ dan ‘harga’ kendaraan.
class-kendaraan.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } function bacaMerek() { return $this->merek; } function bacaHarga() { return $this->harga; } function __construct($x, $y) { $this->merek = $x; $this->harga = $y; } } ?> |
Perhatikan
1 2 3 4 |
function __construct($x, $y) { $this->merek = $x; $this->harga = $y; } |
Function tersebut kita buat 2 parameter, dimana $x menyatakan merek kendaraan, dan $x adalah harganya. Selanjutnya, perintah
$this->merek $x;
Digunakan untuk setting property merek kendaraan berdasarkan nilai $x. Demikian juga perintah
$this->harga = $y;
Untuk setting property harga kendaraan berdasarkan nilai $y.
Selanjutnya, bagaimana cara melakukan instantisasi sekaligus setting propertienya?.. Perhatikan script ini :
contoh.php
1 2 3 4 5 6 7 |
<?php include 'class-kendaraan.php'; $kendaraan1 = new kendaraan(); echo 'Harga dari '.$kendaraan1->bacaMerek().' adalah Rp. '.$kendaraan1->bacaHarga(); ?> |
10. ENCAPSULATION
Dalam dasar-dasar OOP, ada istilah encpsulation. Istilah ini terkait dengan aksesibilita properties dalam suatu class.
Dengan encapsulation ini, kita bisa mengatur sebuah properti apakah hanya bisa diakses dalam class tersebut saja.
Aksesibilitas properties dalam encapsulation ini ada tiga sifat:
– Public : properti dapat diakses darimanapun
– Private : properti hanya dapat diakses dari dalam class saja
– Protected : properti hanya dapat diakses dari dalam class atau class turunan (inheritanced class)
Untuk membedakan ketiganya, perhatikan contoh berikut ini
class-kendaraan.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php class kendaraan { protected $jumlahRoda; public $warna; public $bahanBakar; public $harga; private $merek; function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } function setHarga($x) { $this->harga = $x; } function bacaMerek() { return $this->merek; } function bacaHarga() { return $this->harga; } function __construct($x, $y) { $this->merek = $x; $this->harga = $y; } } ?> |
Perhatikan class diatas. Untuk properti ‘warna’, ‘bahan bakar’ dan ‘harga’ dibuat sebagai public properties.
Sedangkan untuk properti ‘jumlahRoda’ dan ‘merek’, masing-masing sebagai protected dan private properties.
1 2 3 4 5 6 |
<?php include "class-kendaraan.php"; $kendaraan1 = new kendaraan('Yamaha MIO', 10000000); echo 'Nama Merek : '.$kendaraan1->merek; ?> |
Dalam script diatas, setelah proses instantisasi dan setting properti untuk objek $kendaraan1, akan dilakukan pengaksesan ke properti merek secara langsung (tanpa method) dengan memberikan perintah
$kendaraan1->merek
Terus apa yang terjadi diatas?.. Ternyata akan muncul merek
FATAL ERROR : Cannot access private property kendaraan ::$merek
Hal ini terjadi karena properti merek bersifat private, sehingga properti ini tidak bisa diakses dari luar class.
Bagaimana dengan akses ke properti harga secara langsung? Perhatikan script berikut ini
contoh.php
1 2 3 4 5 6 |
<?php include "class-kendaraan.php"; $kendaraan1 = new kendaraan('Yamaha MIO', 10000000); echo 'Harga : '.$kendaraan1->harga; ?> |
Ternyata jika script diatas dijalankan, bisa memunculkan harga dari Yamaha MIO.
Nah, yang menjadi pertanyaan, apakah bisa kita mengakses sebuah properti yang sifatnya private dalam class dari luar?..
Jawabanya adalah bisa, namun tidak dilakukan secara langsung dengan mengakses propertinya namun menggunakan method. Sebagai contoh, misalkan kita ingin mengakses properti merek yang sifatnya private, maka kita bisa menggunakan method bacaMerek().
contoh.php
1 2 3 4 5 6 |
<?php include "class-kendaraan.php"; $kendaraan1 = new kendaraan('Yamaha MIO', 10000000); echo 'Harga : '.$kendaraan1->bacaMerek(); ?> |
Ohh iya, bagaimana dengan deklarasi properties menggunakan ‘var’ seperti pada contoh-contoh di awal, misalnya :
1 2 3 4 5 6 7 8 9 |
class kendaraan { var $jumlahRoda; var $warna; var $bahanBakar; var $harga; var $merek; .. .. } |
Penggunaan ‘var’ di depan nama properties secara otomatis akan bersifat sebagai public.
Maka, muncul pertanyaan apakah bisa dibuat ENCAPSULATION dengan sifat private, protected dan public ini hanya untuk properties saja?
Jawabannya adalah TIDAK, sebuah function atau method pun bisa diterapkan hal ini. Sebagai contoh misalkan kita buat method statusHarga() sebagai private method.
class-kendaraan.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php class kendaraan { protected $jumlahRoda; public $warna; public $bahanBakar; public $harga; private $merek; private function statusHarga() { if ($this->harga > 50000000) $status = 'Mahal'; else $status = 'Murah'; return $status; } function setMerek($x) { $this->merek = $x; } functiom setHarga($x) { $this->harga = $x; } function bacaMerek() { return $this->merek; } function bacaHarga() { return $this->harga; } function __construct($x, $y) { $this->merek = $x; $this->harga = $y; } } ?> |
Kemudian dicek, apakaj efek jika sebuah method dibuat private dengan memanggil method statusHarga() didalam script.
contoh.php
1 2 3 4 5 6 |
<?php include 'class-kendaraan.php'; $kendaraan1 = new kendaraan('Yamaha MIO', 10000000); echo 'Status harga : '.$kendaraan1->statusHarga(); ?> |
Jika script diatas dijalankan, maka akan muncul pesan error sbb :
Fatal error: Call to private method kendaraan::statusHarga() from context ”
Yang menginformasikan bahwa method statusHarga() bersifat private sehingga tidak bisa diakses dari luar class.;
11. PEWARISAN (Inheritance)
Perhatikan kembali ke class-kendaraan.php, selanjutnya bagaimana jika kita ingin membuat objek baru akan tetapi objek ini akan berupa ‘kereta-api’? Khusus kere