Tutorial OOP Dasar Pada PHP
Pengantar Pemograman Berbasis Objek
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Pada playlist sebelumnya kita sudah belajar pemograman dasar PHP, dimana kita sudah belajar cara menyelesaikan masalah dengan cara membaginya menjadi function dan variable. Sebagai contoh disini kita memiliki 2 buah data murid yang berupa nama dan kelasnya. Kemudian kita membuat function showInformation untuk menunjukkan murid belajar di kelas yang mana.
Kalau kita memperbesar ruang ringkup dari program kita, kita menambahkan data ketiga yang ternyata adalah seorang guru. Tentunya guru tidak cocok menggunakan function showInformation yang telah ada, karena guru seharusnya mengajar, bukan belajar. Sebagai solusinya disini kita membuat function baru yang khusus digunakan untuk guru.
Namun cara menulis kode seperti ini, menjadinya kodenya sangat tidak jelas ya. Ini adalah contoh buruk yang seharusnya tidak ditiru oleh teman-teman. Untuk menggunakan function pada kode ini, programmernya harus mengerti cara menggunakannya. Disini terjadi banyak resiko kesalahan penggunaan. Misalkan kalau programmer menggunakan argument pertama $name1, namun argument keduanya $classroom2, yang mengakibatkan 'Andi' belajar di kelasnya 'Budi'.
Programmer juga bisa bisa melakukan kesalahan seperti menggunakan function showInformation1 untuk guru. Sebagai hasilnya gurunya menjadi belajar, bukan mengajar.
Nah, untuk menulis kode yang lebih rapi untuk masalah-masalah seperti ini, maka muncullah cara pemograman berbasis objek.
Pemograman berbasis objek dalam bahasa Inggris adalah Object Oriented Programming, atau disingkat dengan OOP. OOP adalah paradigma atau cara pikir pemograman yang menggunakan objek sebagai entitas paling kecil untuk merancang dan mengorganisasi program.
PHP baru mendukung OOP mulai dari versi 5. Kalau kita masih menggunakan versi sebelumnya, kita hanya bisa menuliskan kode menggunakan function. Kalau kita menggunakan versi 5 atau keatasnya, kita bisa menggunakan OOP. Namun yang enaknya, walaupun sudah mendukung OOP, PHP tidak mewajibkan kita untuk menggunakan OOP. Hal seperti ini menyebabkan orang yang baru mulai belajar pemograman, bisa langsung menggunakan PHP. Kita hanya perlu menguasai dasar-dasar pemogramannya mulai dari variable hingga function, kemudian kita sudah bisa langsung membuat program.
Lain halnya dengan bahasa pemograman yang murni OOP seperti Java. Java sejak lahir di versi pertamanya sudah murni OOP. Jadinya semua kode yang hendak kita tulis dalam bahasa Java, harus menggunakan konsep OOP. Hal seperti ini malah menjadi barrier of entry, menyebabkan orang baru menjadi sulit untuk masuk ke bahasa pemograman Java. Terutama bagi teman-teman yang belum mengenal pemograman sama sekali, kalau mau belajar Java harus belajar sampai ke OOP-nya terlebih dahulu, baru bisa membuat program Java.
Sebaliknya, ada juga bahasa pemograman lain yang tidak mendukung OOP sama sekali. Bahasa pemograman tersebut mengatakan bahwa untuk belajarnya menjadi gampang, karena tidak perlu belajar OOP sama sekali. Namun kalau menurut pendapat saya, bahasa pemograman yang jaman sekarang masih belum mendukung OOP, itu malah menjadi hal yang negatif, bukan positif. Karena tanpa adanya OOP, kita akan kesulitan untuk mengorganisir kode yang kita tulis, terutama untuk proyek dalam skala besar.
Sekarang kita masuk ke prinsip pertama dari OOP, yaitu Encapsulation. Encapsulation berarti kita mengelompokkan variable dan function yang berkaitan menjadi sebuah objek. Contohnya seperti pada kasus sebelumnya. Kita memiliki data pelajar. Nah, dari contoh kasus ini kita akan membuat kode yang sama namun menggunakan pendekatan OOP.
Pada PHP, sebelum kita membuat object, kita harus membuat class-nya terlebih dahulu. Class ini bisa kita anggap sebagai blueprint atau cetakan untuk membuat banyak object. Misalkan kita buat class Student untuk menyimpan data pelajar.
Apa saja data yang perlu disimpan untuk pelajar tersebut? Pada contoh kasus sebelumnya, datanya adalah nama dan ruangan kelasnya, namun sebelumnya kita menyimpan data dalam bentuk variable. Kalau di dalam OOP, variable tersebut bisa kita simpan ke dalam class. Variable yang disimpan ke dalam class kita sebut dengan nama Property, atau ada juga yang menyebutnya dengan nama Attribute atau Field. Jadi di dalam class Student, terdapat property $name dan $classroom.
Masih berkaitan dengan data pelajar, kita memiliki sebuah function yang bertujuan untuk menampilkan data pelajar tersebut ke layar. Nama function-nya adalah showInformation. Kalau menggunakan OOP, function juga kita masukkan ke dalam class. Setelah masuk ke dalam class, istilah function berubah menjadi menjadi method.
Ini adalah contoh kode untuk mendeklarasikan sebuah class. Pertama kita tuliskan dahulu kata kunci class diikuti oleh nama Kelasnya dan kurung kurawal. Di dalam class, kita bisa menambahkan property dengan menggunakan kata kunci var diikuti oleh nama property-nya. Sedangkan untuk menambahkan method, sintaks-nya sama persis seperti aturan untuk menambahkan function, hanya saja ditulis di dalam class.
Agar kode kita menjadi lebih rapi, untuk penamaan Class, kita biasanya menggunakan Title Case. Artinya setiap huruf pertama dalam kata, kita menggunakan huruf besar. Jadi huruf S pada Student menggunakan huruf besar.
Di dalam class, kita tuliskan dahulu semua property di bagian atas dari class. Setelah semua property telah disebutkan, barulah kita mulai menulis methods-nya.
Setelah kita memiliki class, maka proses berikutnya adalah Instantiate. Instantiate adalah proses membuat object dari class. Kalau kita analogikan bahwa class itu adalah sebuah cetakan. Dan dari cetakan tersebut, kita bisa membuat banyak object yang secara otomatis memiliki semua property dan method dari class. Nantinya pada setiap object, kita bisa mengisi nilai dari property-nya sesuai dengan kebutuhan object tersebut. Misalkan pada objek 'Andi', kita isi $classroom-nya dengan nilai '1C'. Sedangkan pada objek 'Budi', kita isi $classroom-nya dengan nilai '2A'.
Ini adalah contoh kode Instantiate. Kita membuat object yang kita simpan dengan nama $budi. Cara membuatnya adalah dengan menggunakan kata kunci new diikuti oleh nama class dan tanda kurung. Setelah kita berhasil membuat object, maka kita bisa menggunakan semua property dan method yang dimiliki oleh class-nya. Cara menggunakannya adalah pertama kita sebutkan dahulu nama object-nya yaitu $budi, diikuti oleh tanda panah dan nama property atau method-nya.
Agar lebih jelas, kita coba praktek coding ya. Pertama kita buat folder dahulu. Jadi ini adalah satu folder khusus untuk menampung class. Kita beri nama foldernya class.
Lalu kita buat file di dalamnya. Kita beri nama file Student.php. Nah, biasanya nama file disamakan dengan nama class yang akan kita tulis di dalam file. Tujuannya agar nantinya kita bisa lebih mudah mencari kode deklarasi class-nya.
Di dalam file-nya, pertama kita buat dahulu tag pembuka PHP. Lalu kita coba buat class ya. Kita tulis kata kunci class diikuti oleh nama kelasnya yaitu Student. Lalu kurung kurawal. Kita coba jalankan file-nya. php class/Student.php. Walaupun masih belum ada hasilnya, tapi setidaknya kode bisa berjalan tanpa error.
Kita tes lebih lanjut ya. Sebenarnya pada PHP tidak ada kewajiban nama class harus sama dengan nama file-nya. Jadi disini kita bisa coba ganti nama class dari Student menjadi Teacher. Kalau kita jalankan tidak ada error.
Dalam satu file juga boleh memuat banyak class sekaligus. Misalkan kita kembalikan lagi ke class Student, namun kita copy paste untuk membuat kelas kedua Teacher. Kalau dijalankan juga tidak ada error. Namun tetap lebih baik kita membuat nama file yang sama dengan nama class, dan di dalam file tersebut kita hanya menaruh satu class. Agar kita tidak bingung kedepannya pada saat hendak mencari file deklarasi class.
Kita hapus class Teacher. Selanjutnya kita coba untuk menambahkan property ya. Kita bisa tambahkan di dalam tanda kurung kurawal class. Pertama kita tuliskan dahulu kata kunci var untuk menandakan property, diikuti oleh nama property-nya menggunakan tanda dollar. Kita buat 2 buah property ya, $name dan $classroom.
Selanjutnya kita tambahkan method. Cara membuat method masih sama persis dengan cara membuat function ya. Hanya saja deklarasinya kita buat di dalam tanda kurung kurawal kelas. Misalkan kita buat function showInformation(). Isinya untuk sementara kita echo saja "Method showInformation\n". Kita jalankan dan tidak ada error ya. Berarti deklarasi class kita sudah tertulis dengan benar.
Langkah berikutnya adalah kita buat lagi file baru dengan nama main.php. Rencananya pada file ini kita akan melakukan instantiate dari kelas Student. Kita buat dahulu tag pembuka PHP. Lalu kita buat variable $budi. Nah, teman-teman masih ingat kan sintaks untuk membuat objek? Kita gunakan kata kunci new, diikuti oleh nama class-nya yaitu Student dan tanda kurung.
Kita coba jalankan ya. Ternyata keluar error bahwa class "Student" tidak ditemukan. Mengapa tidak ditemukan? Jawabannya karena sekarang kita bekerja menggunakan 2 file yang berbeda ya. Jadi kalau kita sedang mengeksekusi file main.php, kodenya hanya satu baris si budi ini saja. Tidak ada deklarasi dari kelas Student-nya.
Jadi yang harus kita lakukan adalah menghubungkan file main.php ke file Student.php. Ada 2 buah function yang bisa membantu kita untuk melakukan hal ini, yaitu include dan require. Pertama kita coba require dahulu ya. Sebagai argumentnya kita harus menyebutkan nama file dari Student. Namun ingat bahwa file tersebut berada di dalam folder class ya. Jadi pertama kita sebut dahulu nama foldernya class, diikuti oleh tanda garis miring, baru nama file-nya Student.php.
Nah, setelah kita menambahkan require dan kita jalankan. Barulah sekarang tidak ada error ya.
Kita coba var_dump nilai dari $budi. Hasilnya $budi adalah sebuah object. Perhatikan di dalam kurung terdapat nama kelasnya ya, yaitu Student. Dan objek ini memiliki 2 buah property "name" dan "classroom", keduanya bernilai null karena masih belum kita beri nilai.
Cara menggunakan property mirip dengan cara menggunakan variable. Hanya saja sebelum kita menyebutkan nama property, harus didahului oleh nama objek dan tanda panah. Misalkan kita hendak mengisi property name dengan nilai string "Budi", maka kita bisa menuliskannya dengan cara $budi->name = "Budi". Kalau kita coba jalankan, maka sekarang property name sudah diisi dengan nilai string "Budi". Kita juga bisa menggunakan cara yang sama untuk memasukkan nilai "2A" ke property classroom.
Kalau kita hendak mengakses nilai yang disimpan di dalam property, kita juga menggunakan cara yang sama. Misalkan kita mau coba var_dump nilai dari classroom, maka kita menyebutnya sebagai $budi->classroom. Maka kita mendapatkan hasil string "2A".
Ada beberapa alternative cara melakukan instantiate class. Yang pertama adalah kita menyimpan nama kelasnya ke dalam variable dalam bentuk tipe data string. Sebagai contoh, kita buat variable $class yang isinya adalah string 'Student'. Kemudian kode untuk pembuatan objeknya kita ganti menjadi $budi = new $class(). Jadi nama kelasnya diambil dari isi variable $class. Hasilnya tetap sama, kita membuat objek budi yang diambil dari kelas Student.
Kita komentari lagi kode baru kita. Sekarang kita coba alternatif kedua ya. Caranya adalah kita membuat object dengan kata kunci new langsung diikuti oleh tanda kurung, dan di dalamnya kita sebutkan nama kelas dalam bentuk string. Maka sintaksnya menjadi $budi = new('Student');. Dan hasilnya tetap sama ya. Walaupun semua cara memberikan hasil yang sama, namun saya lebih suka menggunakan cara pertama ya. Karena cara pertama ini adalah cara yang paling umum dan digunakan juga pada bahasa pemograman lainnya.
Kita bisa menambahkan tipe data pada property. Sebagai contoh, untuk kedua property kita ingin menggunakan tipe data string. Kita bisa menambahkan kata string setelah kata kunci var. Sekarang kita tidak bisa menggunakan property untuk tipe data lainnya. Kalau misalkan kita memasukkan nilai angka 2 ke property classroom, maka sebagai hasilnya secara otomatis diubah menjadi string "2". Namun kalau kita mencoba untuk memasukkan nilai null, maka hasilnya menjadi error.
PHP versi 7,1 memperkenalkan fitur Nullable Type. Dengan menggunakan fitur ini, maka kita bisa mengisi tipe data lain dengan nilai null. Fitur ini bisa kita gunakan pada property, parameter dan return value. Caranya adalah dengan menambahkan tanda tanya sebelum tipe datanya. Sebagai contoh pada deklarasi property classname, kita ubah dari string menjadi ?string. Kalau kita jalankan maka sekarang kode kita sudah tidak error. Property classname dapat diisi dengan nilai null.
Property bisa kita isi dengan nilai default. Sebagai contoh, pada property classroom kita beri nilai default string 'Kosong'. Caranya? Kita buka dahulu deklarasi class-nya. Setelah deklarasi property classroom, kita beri tanda sama dengan dan nilai default-nya yaitu 'Kosong'.
Sekarang kalau misalkan kita membuat objek Student, namun tidak memberikan nilai pada classroom-nya, maka nilainya langsung mengambil nilai default, yaitu 'Kosong'. Kita kembalikan dulu nilai classroom $budi ke '2A'.
Sekarang kita modifikasi method showInformation ya. Kita coba sesuaikan dengan contoh kasus sebelumnya ya. Kita ingin tampilkan "$name belajar di $classroom\n". Kita balik ke main.php. Kita komentari dahulu var_dump. Kita jalankan method showInformation(). Caranya mirip dengan cara memanggil property ya. Kita sebutkan dahulu objeknya yaitu $budi ikuti tanda panah, lalu nama method showInformation().
Namun kalau kita jalankan. Ternyata malah error ya. Tidak ada variable $name. Kita balik ke source code Student. Nah, kita balik lagi ke aturan dasarnya ya. Kalau kita hanya menyebut $name, ini artinya adalah variable. Sedangkan yang kita mau adalah property $name. Aturan penulisan property adalah kita harus sebutkan dahulu nama objeknya, diikuti oleh tanda anak panah.
Nah, sekarang masalahnya nama object apa nih? Karena disini kan masih deklarasi kelasnya saja. Kita masih belum melakukan instantiate. Disinilah kita menggunakan kata kunci $this. $this merujuk ke object saat ini. Jadi string-nya kita ganti menjadi "$this->name belajar di $this->classroom\n".
Kode yang sekarang kalau kita jalankan sudah berfungsi dengan benar. Namun sebagai alternatif, teman-teman juga bisa menuliskan property dalam tanda kurung kurawal. Jadinya seperti ini "{$this->name} belajar di {$this->classroom}\n". Hasilnya sama. Ini hanya alternatif saja ya. Terserah teman-teman lebih suka menggunakan cara yang mana.
Agar method lebih jelas, kita juga perlu memberitahukan return value-nya. Kebetulan method kita isinya langsung echo ke layar, artinya kita tidak mengembalikan nilai apa pun. Maka return value yang paling cocoknya adalah void. Kita tambahkan di bagian akhir deklarasi function-nya tanda titik dua dan void.
Kalau dijalankan tidak error ya. Void berarti tidak mengembalikan apa pun. Jadi kalau di dalam function kita hendak memanggil return, harus langsung diikuti tanda titik koma. Kalau return; seperti ini tidak error.
Jangan menyamakan void dengan null ya. Jangan mentang-mentang deklarasinya void terus kita return null. Ini akan menjadi error. Void berarti tidak mengembalikan nilai apa pun. Sedangkan return null berarti mengembalikan nilai null. Ini adalah dua hal yang tidak sama. Kita hapus kembali bagian return ya.
Kita kembali ke main.php. Kita lanjutkan kode kita untuk menyelesaikan contoh kasus sebelumnya. Kita buat object kedua yaitu $andi. Kita isi namanya 'Andi' dan kelasnya '1C'. Lalu kita panggil method showInformation().
Selanjutnya kita buat lagi file baru pada folder class. Dengan nama Teacher.php. Isinya kita copy paste saja ya dari Student. Kita hanya perlu mengubah nama class menjadi Teacher. Lalu pada bagian showInformation, kita ganti kata belajar menjadi mengajar.
Kembali lagi ke main.php. Pertama kita tambahkan dahulu require untuk merujuk ke Teacher.php.
Selanjutnya kita buat object $skysen yang merupakan kelas Teacher. Kita isi property name dengan 'Skysen' dan classroom dengan '1C'. Lalu kita panggil method showInformation().
Nah, ini adalah hasil pemograman dengan pendekatan OOP. Disini kita sudah menggunakan prinsip pertama OOP yaitu Encapsulation, dimana kita melakukan gruping antara variable dengan method yang berkaitan menjadi sebuah object. Sebagai hasilnya, kita selalu menggunakan method yang tepat untuk variable yang tepat. Jadi kalau kita sedang memproses object $budi, kita sudah pasti menggunakan semua data dari $budi. Kita tidak bisa tercampur antara menggunakan nama 'Budi' tapi classroomnya menggunakan data Andi.
Berbeda dari pemograman berbasis function seperti pada contoh kasus sebelumnya. Disini kita masih bisa salah mengirimkan argument. Argument pertama $name1 namun argument kedua $classroom2. Jadinya 'Andi' menggunakan data kelas milik 'Budi'.
Dengan menggunakan OOP, kita juga terlindung dari kesalahan memilih method. Misalnya kalau kita membuat object Teacher, ya hasilnya sudah pasti mengajar. Kita tidak bisa melakukan kesalahan seperti menggunakan showInformation1, tapi menggunakan argument ketiga yang merupakan teacher. Sebagai hasilnya teacher-nya malah belajar.
Oke ya, sampai disini kita sudah belajar mengenai cara menulis kode dengan pendekatan baru yaitu Object Oriented Programming. Kita sudah belajar mulai dari konsepnya, cara coding-nya hingga ke keuntungan yang kita dapatkan dari mengorganisir kode berbasis object. Pada video berikutnya kita akan menggali lebih dalam lagi mengenai fitur-fitur lain yang ditawarkan oleh OOP. Tetap semangat dan sampai bertemu lagi di video lainnya.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.