Overloading pada PHP dan Java

Ini adalah postingan pertama saya di Belajar Ngoding. Pada kesempatan ini saya ingin sedikit men-sharing tentang konsep overloading serta penerapannya pada PHP dan Java.

Konsep Overloading dalam Object Oriented Programming

Dalam dunia nyata, overload berarti menambahkan suatu pekerjaan ekstra kepada mesin maupun manusia. Seperti misalnya : seseorang diminta untuk mengendarai sepeda motor, kemudian ia diminta untuk mengendarai mobil, kemudian ia diminta untuk mengendarai kuda. Sama-sama ‘mengendarai’ namun action nya berbeda.

Konsep Overloading dalam OO, sebagaimana dalam php.net :

PHP’s interpretation of “overloading” is different than most object oriented languages. Overloading traditionally provides the ability to have multiple methods with the same name but different quantities and types of arguments.

PHP menginterpretasikan “overloading” berbeda dari kebanyakan bahasa pemrograman berorientasi objek. Overloading biasanya diartikan sebagai kemampuan untuk memiliki banyak method dengan nama yang sama namun berbeda jumlah dan tipe argumen / parameter yang dilewatkan.

Overloading dalam Pemrograman Java

Ada dua cara untuk melakukan overloading di pemrograman java :

  1. Dengan mengubah jumlah argumen / parameter yang dilewatkan ke sebuah method
  2. Dengan mengubah tipe data dari argumen / parameter yang dilewatkan ke sebuah method

Pada gambar di atas kita melihat ada satu fungsi yang sama : search, yang ditulis tiga kali dengan argument yang berbeda. Ketiga-tiganya dipanggil di dalam fungsi ‘main’. Dan masing-masing menjalankan action yang berbeda sesuai dengan argument yang dikirimkan

Java Overload Method

Hasil dari code di atas :

Java Overloading

Keuntungan dari penggunaan overloading adalah meningkatkan readibility / keterbacaan dari sebuah program. Jika kita tidak menerapkan overloading, maka kita harus menerapkan nama-nama yang berbeda dari setiap method, misalnya :

searchSiswaById()
searchSiswaByName()
searchSiswaByNameAndClass()

Padahal kita sama-sama ingin melakukan aksi yang sama yaitu : pencarian.

Masalah pada PHP

PHP tidak mendukung ‘traditional-overloading’ seperti yang sudah dicontohkan di atas. Kita akan melakukan test seperti pada gambar berikut :

PHP Wrong Overloading

Hasilnya adalah seperti berikut :

Error PHP OverloadingPHP menolak pendeklarasian ulang dari sebuah fungsi yang sudah dideklarasikan. Dari sini, kita bisa melihat bahwa PHP sama sekali tidak mendukung overloading dalam terminologi yang umum digunakan dalam OOP.

‘Konsep Overloading’ Menurut PHP

Dalam dokumentasi resmi manual PHP disebutkan bahwa ‘overloading’ di PHP berarti adalah secara dinamis membuat properti dan method. Entiti dinamis ini akan diproses oleh magic method yang ada dalam sebuah class.

Praktik Overloading dalam PHP

Salah satu magic method yang bisa digunakan adalah __call. Magic method __call atau disebut juga overloading method __call akan melewatkan nama method yang dipanggil beserta argumennya sebagai argumen yang dilewatkan ke dalam magic method call selama method yang dipanggil itu belum dideklarasikan di dalam class atau out of scope (tidak disetting public).

Berikut ini adalah contoh implementasisnya :

PHP Overloading

Hasil saat script di atas kita jalankan adalah :

PHP __call

Keterangan :

  • Pada fungsi pertama get_result sudah dideklarasikan di dalam class dan di setting secara public, maka saat object dari class tersebut melakukan pemanggilan fungsi get_result yang dijalankan adalah script yang ada di dalam get_result
  • Pada fungsi kedua  get_private sudah dideklarasikan di dalam class hanya saja fungsi tersebut di setting private sehingga hanya bisa dipanggil di dalam class, ketika fungsi get_private di panggil dari luar kelas maka dianggap out of scope dan baris script yang dijalankan adalah script yang ada di dalam magic method __call. Dan karena get_private tidak melewatkan parameter apapun
  • Pada fungsi ketiga get_user(1,”test”,100), fungsi tersebut sama sekali belum dideklrasikan di dalam class sehingga secara otomatis script yang dijalankan adalah script yang ada di dalam __call dengan melewatkan nama fungsi dan array dari parameter fungsi tersebut sebagai paramater dari magic method __call.

Dari sini kita bisa melihat bahwa konsep overloading yang ada pada php adalah secara dinamis membuat method dan property / parameter dari method tersebut.

Contoh penerapan overloading php ini misalnya kita bisa membuat class untuk melakukan query database secara otomatis berdasarkan pola tertentu dengan menggunakan manipulasi string di dalam magic method __call nya, sehingga kita tidak perlu menuliskan setiap fungsi untuk melakukan query satu  per satu. Bagaimana praktiknya ? Akan saya tulis di tulisan berikutnya.