OOP using PHP part 2

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 :

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. :

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

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 :

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.

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 :

Perintah :

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

Latihan :

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

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.

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 :

atau

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?

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.

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 :

Kita dapat memisahkan class ‘kendaraan’ ini dalam file tersendiri misalkan diberinama ‘class-kendaraan.php’ yang isinya.

Selanjutnya kita include kan file class-kendaraan.php ini ke dalam script lain apabila kita memerlukannya.

contoh.php

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

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

Perhatikan

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

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

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.

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

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

Ohh iya, bagaimana dengan deklarasi properties menggunakan ‘var’ seperti pada contoh-contoh di awal, misalnya :

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

Kemudian dicek, apakaj efek jika sebuah method dibuat private dengan memanggil method statusHarga() didalam script.

contoh.php

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