Polymorphism dalam PHP

Khairu Aqsara Sudirman

Khairu Aqsara Sudirman

Mar 24, 2021 — 3 mins read

Polymorphism jika kita terjemahkan dalam bahasa yang cukup sederhana adalah banyak bentuk, tetapi sayang nya makna dari Polymorphism tidaklah sesederhana itu, dalam konsep pemrograman PHP Polymorphism sendiri maksudnya adalah kita bisa menggunakan interface yang sama untuk kebutuhan yang berbeda, sederhanya satu class atau lebih bisa memiliki fungsi yang sama, parameter yang sama tetapi dengan tujuan dan implementasi yang berbeda, mungkin nanti akan sedikit lebih jelas kekita kita dihadapkan dengan masalah dan kode karena dalam Polymorphism juda ada istilah Subtype Polymorphism atau Inclusion Polymorphism

Mari kita berandai-andai, misalkan kita memiliki sebuah class dengan nama Hewan, kemudian kita mengkategorikanya kedalam banyak class lain-nya, misalnya Kambing, Kuda dan Bebek, dalam kasus ini class Hewan kita anggap sebagai SuperType dan Kambing, Kuda dan Bebek kita sebut sebagai SubType.

Didalam pemrograman PHP, dengan menggunakan interface kita bisa mendifinisikan fungsionalitas yang minimal harus di implementasikan oleh class yang mengimplementasiknya, misalnya 

interface Hewan
{
	public function makan(string $a) : bool;
	public function terbang(bool $b) : string;
}

dalam contoh kode diatas kita membuat sebuah interface dengan nama Hewan, kemudian terdapat 2 buah fungsi dengan scalar type hints untuk menentukan return type dari fungsi tersebut, dimana nantinya setiap class yang menimplementasikan interface ini minimal harus mendifinsikan dua fungsi tersebut, misalnya seperti 

class Kambing implements Hewan {
}

seandaiany script tersebut dijalankan, kita akan mendapatkan error 

Fatal error: Class Kambing contains 2 abstract methods and must therefore 
be declared abstract or implement the remaining methods (Hewan::makan, Hewan::terbang)

Sesuai dengan aturan interface, kita harus mengimplementasikan semua fungsi yang ada dalam interface kedalam class yang menggunakannya.

class Kambing implements Hewan {
	public function makan(string $a): bool {
		return ($a == 'Rumput') ? true : false;
	}

	public function terbang(bool $b): string {
		return ($b) ? "Bisa Terbang" : "Tidak Bisa Terbang";
	}
}

setelah kita mengimpmentasikan semua fungsi yang ada, kita hanya tinggal melakukan instantiate class Kambing dan menggunakan fungsinya seperti biasanya

$kambing = new Kambing();
var_dump($kambing->terbang(false));
// string(18) "Tidak Bisa Terbang"

So, dimana kira-kira Polymorphism-nya ? bukanya itu hanya interface biasa??? mari kita lihat contoh lainya, agar kita sama-sama paham dan mengerti diaman Polymorphism-nya.

class Kuda implements Hewan {
	public function makan(string $a): bool {
		return ($a == 'Tahu' || 'Tempe' ) ? true : false;
	}
	
	public function terbang(bool $b): string {
		if($b){
			return str_repeat("Waw ", 10)." Yang benar saja, kuda terbang dong...";
		}else{
			return "h".str_repeat("m", 10)." benar sekali";
		}
	}	
}

jika kita instantiate class Kuda dan menjalankanya maka hasilnya

$kuda = new Kuda();
var_dump($kuda->terbang(true));
//string(78) "Waw Waw Waw Waw Waw Waw Waw Waw Waw Waw  Yang benar saja, kuda terbang dong..."

apakah teman-teman sudah mendapatkan gambaran dimana letak Polymorphism-nya ? jika tidak mari kita lihat contoh yang sedikit lebih komplek

$hewan = [
	'kuda'=> new Kuda(),
	'kambing'=> new Kambing()
];

foreach($hewan as $class)
{
	var_dump($class->terbang(true));
}

jika kita jalankan, maka hasilnya adalah

string(78) "Waw Waw Waw Waw Waw Waw Waw Waw Waw Waw  Yang benar saja, kuda terbang dong..."
string(12) "Bisa Terbang"

atau bahkan kita bisa memanggil class tersebut dengan metode yang kece, seperti metode-metode pemanggilan fungsi pada framework-framework besar, misalnya

var_dump((new Kuda)->terbang(false));
// string(24) "hmmmmmmmmmm benar sekali"

saya harap teman-teman menangkap maksud dan tujuan dari Polymorphism melalui contoh yang ada, terlihat sederhan mungkin, tetapi percayalah ini tidaks sesederhan seperti yang terlihat, seperti kata pepatah programmer lama

membuat kode itu mudah, tetapi membuat orang lain memahami kode itu tidaklah sesederhana seperti yang terlihat.
laravel programming php
Read More

Writeup CTFR Obfuscate .NET

Dari deskripsi dan judul Challengenya sudah jelas jika aplikasinya di-obfuscate, jadi akan sangat sulit jika mereversenya dalam kondisi ter-obfuscate, saya menggunakan beberapa tool untuk menyelsaiakan challenge ini, pertama saya menggunakan tools dengan nama de4dot tetapi sayang nya repo tersebut sudah diarsipkan oleh siempunya, jadi harus compile fork dulu kemudian compile ulang untuk bisa menggunakan https://github.com/khairu-aqsara/de4dot/ kemudian menggunakan tools https://devextras.com/decompiler/ untuk yang ini banyak pilihan, bisa menggunakan decompiler lain juga

Read More

Subdomain Routing Pada Laravel

Misalnya, saya punya aplikasi dengan alamat domain beritaku.xyz kemudian saya ingin backend dari aplikasi hanya bisa diakses melalui subdomain backend.berita.xyz, kira-kira begitulah kasusnya ya, saya rasa teman-taman pasti faham maksudnya.