Konstruktorun interfeysdə elanı OOP-də PHP-də
Interfeysdə həmçinin sinif konstruktorunu elan etmək olar.
Bir nümunəyə baxaq. Tutaq ki, biz Rectangle sinifi yaratmaq qərarına gəldik,
onda sahəni, perimetri tapmaq üçün metodlar,
həmçinin iki parametr qəbul edən konstruktor olacaq.
Gəlin sinifimizi interfeys vasitəsilə təsvir edək:
<?php
interface iRectangle
{
public function __construct($a, $b); // iki parametrli konstruktor
public function getSquare();
public function getPerimeter();
}
?>
Gəlin iRectangle interfeysimizin realizasiyasını yazaq:
<?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);
}
}
?>
Konstruktoru interfeysdə elan etmək bizə nə verdi? Birincisi, biz sinifdə konstruktoru realizə etməyi unutmayacayıq. Ikincisi, interfeys aydın şəkildə göstərir ki, sinif konstruktoru iki parametr qəbul etməlidir: çox deyil, az deyil. Bu da bizi təsadüfi səhvdən qoruyacaq.
Niyə biz ayrı iRectangle interfeysi yaratdıq,
konstruktoru isə Figure interfeysinə əlavə etmədik?
Çünki bütün fiqurların müxtəlif sayda tərəfləri var və
müvafiq olaraq, konstruktorda müxtəlif sayda parametrləri var.
Ona görə də biz düzbucaqlılar üçün xüsusi olaraq ayrı, daha dəqiq bir interfeys yaratmalı olduq.
iCube interfeysini hazırlayın, hansı ki,
Kub fiqurunu təsvir edəcək. Qoy interfeysiniz
kubun tərəfini parametr kimi qəbul edən konstruktoru,
həmçinin kubun həcmini və səth sahəsini almaq üçün metodları təsvir etsin.
iCube interfeysini realizə edən Cube sinifini hazırlayın.
Istifadəçini təsvir edəcək iUser interfeysini hazırlayın.
Güman edilir ki, istifadəçinin adı və yaşı olacaq və bu sahələr
konstruktorun parametrləri kimi ötürüləcək. Qoy interfeysiniz
həm də istifadəçi üçün ad və yaş üçün getterlərin (ancaq setterlərin deyil) olacağını təyin etsin.
iUser interfeysini realizə edən User sinifini hazırlayın.