Tutorial OOP Dasar Pada PHP
Static
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Dengan menggunakan kata kunci static, maka kita bisa menambahkan property atau method, langsung pada kelasnya. Untuk mengakses property atau method yang static ini, kita cukup menyebutkan nama kelas saja. Kita tidak perlu melakukan instantiate untuk membuat objeknya. Jadinya mirip dengan konstanta pada kelas.
Yang perlu kita ingat pada saat menggunakan static adalah, kita tidak bisa mengakses property dan method yang bersifat tidak static. Hal ini disebabkan karena kode kita sedang dijalankan pada kelasnya. Kita belum memiliki object-nya, sehingga kita tidak bisa mengakses apapun yang berada di dalam object.
Ini adalah contoh kode yang menggunakan kata kunci static. Kata kunci static dan kata kunci visibility boleh bertukar posisi. Jadi kita boleh menyebutkannya sebagai public static, dan kita juga boleh menyebutnya static public. Dalam kode ini, kita membuat static property dengan nama $className, dan static method dengan nama average.
Perhatikan kode di bawahnya. Untuk menggunakan static, kita tidak perlu melakukan instantiate untuk membuat objek. Kita bisa langsung menyebutkan nama kelasnya diikuti oleh dua buah tanda titik dua, dan bisa langsung menyebutkan nama property atau nama method-nya.
Agar lebih jelas, kita coba praktek. Kita buat file baru pada folder class dengan nama MathHelper.php. Di dalamnya kita buka dahulu tag PHP. Lalu kita buat kelas MathHelper. Kita tambahkan public static string $className dengan nilai awal 'Math Helper'.
Kemudian kita buat file baru main.php. Kita buka tag php. Pertama kita require_once dahulu 'class/MathHelper.php'. Kemudian kita ingin mengakses nilai dari property $className. Berhubung static property berada di kelasnya, maka kita tidak perlu melakukan instantiate untuk membuat objeknya. Kita bisa langsung mengaksesnya dengan cara menyebutkan nama kelas, diikuti dengan dua buah tanda titik dua, lalu tanda dollar dan nama property-nya. Kita coba echo dan tambahkan PHP_EOL.
Kita jalankan dan kita berhasil menampilkan isi property $className.
Cara untuk mengakses property ini mirip dengan cara mengakses konstanta ya. Hanya saja pada konstanta tidak menggunakan tanda dollar.
Kalau misalkan kode yang sekarang kita komentari. Lalu kita coba buat object $helper dari kelas MathHelper. Kemudian kita coba echo nilai dari property className. Maka hasilnya malah error ya. Hal ini disebabkan karena static property berada di class, bukan di object.
Selanjutnya kita coba buat public static function average dengan parameter float ...$arguments dan mengembalikan hasil berupa float. Method ini bertujuan untuk mengembalikan nilai rata-rata dari semua nilai yang dikirimkan sebagai argument. Bagaimana isinya? Kita kembalikan nilai total dibagi dengan jumlah argument. Untuk menghitung nilai total, kita tinggal memanggil fungsi array_sum($arguments). Sedangkan untuk menghitung jumlah argument, kita memanggil fungsi count($arguments).
Kita kembali ke file main.php. Kita komentari dahulu kode lama. Kemudian kita coba panggil static method ya. Kita sebut nama kelasnya MathHelper diikut dua buah tanda titik dua dan nama method-nya average. Sebagai argument kita sebutkan nilai 1,2,3,4,5. Agar rapi kita tambahkan PHP_EOL.
Kita jalankan dan kita mendapatkan hasil nilai 3. Balik lagi ya, untuk memanggil static method, kita tidak perlu melakukan instantiate. Kita bisa langsung sebutkan nama kelas dan nama method-nya. Jadi disini kita sudah melihat contoh penggunaan pertama dari static. Misalkan kita memiliki sekumpulan function yang bertujuan untuk membantu kita lebih mudah menuliskan kode. Namun kita tidak ingin menuliskan function tersebut menggunakan prosedural programming, melainkan kita ingin menggunakan cara object oriented programming. Maka kita bisa menuliskan function-function tersebut dengan menggunakan static seperti ini.
Kembali lagi ke method average, untuk membuat method seperti ini sedikit tricky ya. Kita lihat lagi kodenya pada MathHelper. Perhatikan disini bahwa kita membagi dengan count($arguments). Perlu diingat bahwa komputer akan mengalami fatal error setiap kali kita membagi dengan nilai 0. Oleh karena itu kita perlu memberikan validasi agar kita tidak mendapatkan fatal error.
Kita sengaja buat error dahulu ya. Agar nilai count($arguments) menjadi 0, maka kita tidak mengirimkan argument sama sekali. Jadi kita buka lagi main.php. Lalu kita ubah argument dari method average menjadi kosong. Kita jalankan dan sekarang kita mendapatkan fatal error.
Jadi di bagian awal dari method, kita mesti tambahkan validasi dahulu ya. Jika nilai count($arguments) identik dengan 0. Sebagai contoh disini kita kembalikan saja nilai 0. Kalau kita jalankan maka sekarang kode kita sudah tidak fatal error lagi. Dan kalau kita kembalikan argument-nya, maka kita mendapatkan hasil angka 3.
Kita masuk ke contoh berikutnya yang menggunakan kata kunci static, yaitu Singleton. Singleton berasal dari kata Single, yang berarti satu. Singleton adalah salah satu pola desain, dimana kita hanya boleh membuat satu buah objek dari kelas yang bersangkutan. Selain membatasi jumlah objek yang boleh dibuat, biasanya Singleton juga menyediakan cara agar kita bisa mengakses object tersebut dengan mudah.
Nah, sampai disini mungkin teman-teman ada yang bertanya ya. Mengapa hanya boleh satu object? Karena biasanya Singleton ini digunakan untuk menyimpan resource yang digunakan secara bersama-sama. Misalnya untuk menyimpan konfigurasi proyek, menyimpan koneksi ke database, file untuk logging, dan lain-lain. Kalau kita sampai membuat 2 object, artinya konfigurasi dari proyek kita akan menjadi ganda. Terus koneksi ke databasenya juga ada 2. Hal-hal seperti ini akan menyebabkan proyek kita menjadi boros dan meningkatkan resiko untuk terjadinya bugs.
Ini adalah contoh dari Singleton. Yang uniknya disini, kita mengubah contructor menjadi private. Artinya kita tidak bisa membuat object dari luar kelas. Object hanya bisa dibuat di dalam public static function getInstance, dimana object yang telah kita buat disimpan di dalam variable static $instance. Untuk mengakses object tersebut dari luar kelas, kita memanggil static method getInstance.
Kita coba praktek ya. Kita buat file baru di dalam folder class. Nama file adalah Singleton.php. Di dalamnya kita buka tag php. Lalu kita buat kelas Singleton. Kita buat constructor kosong terlebih dahulu ya.
Kemudian kita kembali ke file main.php. Kita komentari dahulu kode sebelumnya agar bisa fokus ke kode baru. Kita tambahkan require_once ke file Singleton.php. Kemudian kita coba buat object-nya ya, dengan kode $singleton = new Singleton(). Kemudian kita var_dump($singleton).
Kalau kita jalankan. Maka kode berjalan normal dan membuat object dari kelas Singleton.
Nah, di dalam pola desain Singleton, object tidak boleh dibuat dari luar kelas. Jadi pada constructornya kita tambahkan visibility private. Sekarang kalau kita jalankan, maka kita mendapatkan fatal error karena kita sudah tidak bisa menjalankan constructor dari luar kelas. Constructor hanya bisa dijalankan dari kode yang berada di dalam kelas.
Untuk itu kita harus membuat sebuah static method untuk membuat object dan mengembalikan pointer menuju object tersebut agar bisa digunakan dari luar kelas. Selain itu kita juga perlu membuat static property untuk menyimpan object-nya.
Pertama kita buat dahulu static property-nya ya, dengan visibility private. Tipe datanya adalah kelas Singleton, berhubung boleh bernilai null maka kita tambahkan tanda tanya di depan nama kelas Singleton. Nama variable adalah $instance dan kita beri nilai awal null.
Selanjutnya kita buat public static function getInstance dengan hasil berupa kelas Singleton. Pertama kita periksa dahulu apakah nilai $instance adalah null. Ingat bahwa untuk mengakses static property, kita harus menggunakan kata kunci self diikuti oleh dua buah tanda titik dua. Berbeda dari property biasa yang menggunakan kata kunci this dan anak panah. Apabila nilai $instance masih null, maka kita isi $instance dengan object baru Singleton. Kemudian kita kembalikan $instance.
Pada file main.php, kita sudah tidak boleh membuat object dari kelas Singleton menggunakan kode diluar kelas Singleton. Jadi untuk mendapatkan object, kita panggil static method getInstance. Sekarang kode kita sudah berjalan dengan benar.
Kelebihan dari menggunakan Singleton adalah, kita bisa dengan mudah mengakses object dengan cara memanggil method getIntance. Dan walaupun kita memanggil getIntance berkali-kali, kita hanya menggunakan satu object yang sama. Sebagai contoh, kita buat lagi variable $singleton2 untuk menampung getIntance. Lalu kita var_dump. Kedua variable kita $singleton dan $singleton2 merujuk ke object yang sama.
Sebagai contoh, kita tambahkan property baru yaitu public string $database dengan nilai awal string kosong. Kemudian pada main.php, kita coba akses property $database dari object $singleton dan mengganti isinya menjadi 'Koneksi ke localhost'. Berhubung kita masih belum pernah membahas database, jadi koneksi database untuk sementara kita anggap sebagai string dahulu ya. Perhatikan kalau kita jalankan script kita, property $database baik pada $singleton dan $singleton2 berubah menjadi 'Koneksi ke localhost'. Hal ini disebabkan karena kedua variable merujuk ke object yang sama.
Jadi kalau kita menggunakan pola desain Singleton, kita bisa dengan mudah mengakses object Singleton dari kode manapun. Dan walaupun kita memanggil getInstance berkali-kali dari tempat yang berbeda-beda, kita tetap mengakses satu object yang sama.
Kegunaan lain dari kata kunci static adalah agar kita bisa membuat instance dari kelas kita dengan menggunakan beberapa jenis argument yang berbeda-beda. Sebagai contoh, misalkan kita membuat kelas Person yang memiliki property $firstName dan $lastName. Dan kita ingin agar kita bisa membuat object-nya dengan 2 cara. Cara pertama adalah dengan menggunakan 2 buah string. Sedangkan cara kedua adalah dengan menggunakan sebuah array. Namun sayangnya PHP tidak memperbolehkan pembuatan method dengan nama yang sama. Sehingga cara coding seperti ini menghasilkan error.
Sebagai solusinya, kita bisa mengubah constructornya menjadi private sehingga tidak bisa dipanggil dari luar kelas. Kemudian kita menyediakan beberapa static method yang bertujuan untuk melakukan instantiate. Kita bisa menggunakan nama method yang berbeda-beda, agar bisa menciptakan object dari argument yang berbeda-beda pula. Sebagai contoh disini kita bisa membuat object menggunakan 2 string, menggunakan array, menggunakan json dan menggunakan xml.
Kita coba praktek ya. Kita buat lagi file baru Person.php pada folder class. Kita buat tag pembuka PHP. Lalu kita buat kelas Person. Kita isi dengan 2 buah property yaitu public string $firstName dan public string $lastName.
Lalu kita buat constructor dengan 2 buah parameter string $firstName dan string $lastName. Isinya sederhana, kita memindahkan nilai dari parameter ke dalam property.
Kemudian kita buat lagi constructor dengan 1 buah parameter berupa array. Isinya kita pindahkan nilai dari parameter dengan index 0 dan 1 ke dalam property. Namun perhatikan disini sudah terjadi error ya. Karena PHP tidak memperbolehkan pembuatan method dengan nama yang sama sebanyak 2 kali. Kita bisa coba jalankan file class/Person.php untuk melihat pesan kesalahannya.
Untuk mengakali masalah seperti ini, maka kita bisa mengubah constructor menjadi private. Kita cukup menggunakan constructor pertama saja. Kemudian kita tambahkan public static function createPersonFromString dengan parameter seperti constructor. Function mengembalikan hasil berupa Person. Di dalamnya, kita kembalikan hasil instantiate dari kelas Person.
Sedangkan constructor kedua bisa kita ganti menjadi public static function createPersonFromArray. Mirip dengan function sebelumnya, kita kembalikan hasil instantiate dari kelas Person juga. Sekarang kita sudah memiliki 2 buah constructor dengan nama method yang berbeda, dan parameter yang berbeda pula.
Kita coba gunakan kedua constructor pada main.php. Pertama kita require terlebih dahulu 'class/Person.php'. Kemudian kita komentari kode lama. Kita coba buat $person1 menggunakan createPersonFromString dengan argument 'David' dan 'Ciang'. Kita var_dump hasilnya.
Kita coba jalankan. Dan berjalan normal ya.
Kita coba lagi constructor berikutnya. Kita buat $array yang berisi string 'Skysen' dan string 'Solution'. Kemudian kita buat $person2 yang memanggil createPersonFromArray dengan menggunakan $array sebagai argument. Kita var_dump juga hasilnya.
Kita coba jalankan. Dan kedua constructor bisa berjalan normal.
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.