Konstruktor deklarálása interfészben OOP PHP-ben
Egy interfészben a osztály konstruktorát is deklarálhatjuk.
Nézzünk egy példát. Tegyük fel, hogy elhatároztuk, hogy készítünk egy
Rectangle osztályt, amelyben
lesznek metódusok a terület és a kerület meghatározására,
valamint egy konstruktor, amely két paramétert fogad.
Írjuk le az osztályunkat az interfész segítségével:
<?php
interface iRectangle
{
public function __construct($a, $b); // két paraméteres konstruktor
public function getSquare();
public function getPerimeter();
}
?>
Írjuk meg az iRectangle interfészünk
implementációját:
<?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);
}
}
?>
Mit adott nekünk a konstruktor interfészben való deklarálása? Először is, nem felejtjük el implementálni a konstruktort az osztályban. Másodszor, az interfész egyértelműen megadja, hogy az osztály konstruktorának két paramétert kell fogadnia: se többet, se kevesebbet. Ez szintén véd meg minket a véletlen hibáktól.
Miért készítettünk külön iRectangle interfészt,
ahelyett, hogy a konstruktort hozzáadtuk volna az Figure
interfészhez? Mivel minden alakzatnak különböző számú
oldala van, és ennek megfelelően a konstruktor paramétereinek
száma is eltérő. Ezért kénytelenek voltunk egy külön, pontosabb interfészt
készíteni kifejezetten a téglalapok számára.
Készítsen egy iCube interfészt, amely
a Kocka alakzatot írja le. Az interfész
írja le a konstruktort, amely paraméterként a kocka oldalát fogadja,
valamint a kocka térfogatának és felszínének meghatározására szolgáló
metódusokat.
Készítsen egy Cube osztályt, amely implementálja az
iCube interfészt.
Készítsen egy iUser interfészt, amely
egy felhasználót ír le. Feltételezhető, hogy
a felhasználónak neve és életkora van, és ezek a mezők a
konstruktor paramétereiként lesznek átadva. Az interfész
állítsa be azt is, hogy a felhasználónak
lesznek getterei (de setterei nem) a névhez és
az életkorhoz.
Készítsen egy User osztályt, amely implementálja az
iUser interfészt.