Beberapa Antarmuka dalam OOP PHP
Di PHP tidak ada pewarisan berganda - setiap
kelas hanya dapat memiliki satu induk.
Namun, halnya berbeda dengan antarmuka:
setiap kelas dapat mengimplementasikan berapa pun jumlah
antarmuka. Untuk melakukannya, nama-nama antarmuka
perlu didaftarkan dipisahkan dengan koma setelah kata kunci
implements.
Ini menunjukkan satu lagi perbedaan antarmuka dari kelas abstrak - kita dapat mengimplementasikan banyak antarmuka, tetapi tidak dapat mewarisi beberapa kelas abstrak.
Mari kita coba dalam praktik. Misalkan selain
antarmuka iFigure, kita juga memiliki
antarmuka iTetragon.
Metode dari antarmuka ini akan diimplementasikan oleh
kelas Quadrate dan Rectangle,
karena mereka memiliki 4 sisi, tetapi bukan kelas
Disk.
Misalkan antarmuka iTetragon mendeskripsikan
getter untuk keempat sisi
segiempat:
<?php
interface iTetragon
{
public function getA();
public function getB();
public function getC();
public function getD();
}
?>
Misalkan juga kita memiliki antarmuka iFigure,
yang telah kita buat sebelumnya:
<?php
interface iFigure
{
public function getSquare();
public function getPerimeter();
}
?>
Mari kita buat agar kelas Quadrate
mengimplementasikan dua antarmuka. Untuk itu, kita daftarkan
kedua antarmuka dipisahkan dengan koma setelah kata kunci
implements:
<?php
class Quadrate implements iFigure, iTetragon
{
// di sini akan ada implementasi
}
?>
Sekarang mari kita sempurnakan kelas Quadrate kita,
agar ia mengimplementasikan antarmuka iTetragon.
Jelas bahwa persegi kita adalah kasus degenerasi
dari segiempat, karena pada persegi
semua sisinya sama. Oleh karena itu, semua metode baru
akan mengembalikan hal yang sama - lebar persegi:
<?php
class Quadrate implements iFigure, iTetragon
{
private $a;
public function __construct($a)
{
$this->a = $a;
}
public function getA()
{
return $this->a;
}
public function getB()
{
return $this->a;
}
public function getC()
{
return $this->a;
}
public function getD()
{
return $this->a;
}
public function getSquare()
{
return $this->a * $this->a;
}
public function getPerimeter()
{
return 4 * $this->a;
}
}
?>
Jelas bahwa dalam persegi panjang tidak semua
sisi sama, hanya sisi yang berhadapan saja.
Dalam hal ini, metode baru akan menjadi sedikit
berbeda. Nah, dan dalam trapesium apa pun
secara umum semua 4 sisinya akan berbeda.
Namun, tidak penting bentuk apa yang kita pertimbangkan - yang penting adalah bahwa semua bentuk ini akan memiliki metode yang dideskripsikan (meskipun beberapa bentuk adalah degenerasi) dan bekerja dengan cara yang seragam.
Buatlah agar kelas Rectangle
juga mengimplementasikan dua antarmuka: yaitu iFigure,
dan iTetragon.
Buatlah antarmuka iCircle dengan metode
getRadius dan getDiameter.
Buatlah agar kelas Disk juga
mengimplementasikan dua antarmuka: yaitu iFigure,
dan iCircle.