Deklarasi Konstruktor dalam Antarmuka di OOP PHP
Dalam antarmuka, kita juga dapat mendeklarasikan konstruktor
kelas. Mari kita lihat contohnya. Misalkan kita memutuskan untuk
membuat kelas Rectangle, yang di dalamnya
akan terdapat metode untuk mencari luas, keliling,
serta konstruktor yang menerima dua parameter.
Mari kita gambarkan kelas kita dengan menggunakan antarmuka:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor dengan dua parameter
public function getSquare();
public function getPerimeter();
}
?>
Mari kita tulis implementasi dari antarmuka kita
iRectangle:
<?php
class Rectangle implements iRectangle
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function getSquare()
{
return $this->a * $this->b;
}
public function getPerimeter()
{
return 2 * ($this->a + $this->b);
}
}
?>
Apa yang kita dapatkan dari deklarasi konstruktor dalam antarmuka? Pertama, kita tidak akan lupa untuk mengimplementasikan konstruktor dalam kelas. Kedua, antarmuka secara eksplisit menunjukkan bahwa konstruktor kelas harus menerima dua parameter: tidak lebih, tidak kurang. Ini juga akan melindungi kita dari kesalahan yang tidak disengaja.
Mengapa kita membuat antarmuka terpisah iRectangle,
dan tidak menambahkan konstruktor ke dalam antarmuka Figure?
Karena semua bangun datar memiliki jumlah sisi yang berbeda
dan, karenanya, jumlah parameter yang berbeda
dalam konstruktornya. Jadi, kita harus
membuat antarmuka terpisah yang lebih spesifik
khusus untuk persegi panjang.
Buatlah antarmuka iCube, yang
akan menggambarkan bangun ruang Kubus. Biarkan antarmuka Anda
menggambarkan konstruktor, dengan parameter menerima
sisi kubus, serta metode untuk mendapatkan
volume kubus dan luas permukaannya.
Buatlah kelas Cube, yang mengimplementasikan antarmuka
iCube.
Buatlah antarmuka iUser, yang
akan menggambarkan pengguna. Diasumsikan bahwa
pengguna akan memiliki nama dan usia dan field-field ini akan
diteruskan sebagai parameter konstruktor. Biarkan
antarmuka Anda juga menetapkan bahwa pengguna
akan memiliki getter (tetapi bukan setter) untuk nama dan
usia.
Buatlah kelas User, yang mengimplementasikan antarmuka
iUser.