PHP da OOP da interfeysda konstruktor e'lon qilish
Interfeysda shuningdek, klass konstruktorini
e'lon qilish mumkin. Keling, bir misolni ko'ramiz. Faraz qilaylik, biz
Rectangle klassini yaratishga qaror qildik, unda
yuzani, perimetrni topish uchun metodlar,
shuningdek, ikkita parametrni qabul qiladigan konstruktor bo'ladi.
Keling, klassimizni interfeys yordamida tavsiflaymiz:
<?php
interface iRectangle
{
public function __construct($a, $b); // ikkita parametrli konstruktor
public function getSquare();
public function getPerimeter();
}
?>
Keling, iRectangle interfeysimizni
amalga oshiruvchi klass yozamiz:
<?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);
}
}
?>
Interfeysda konstruktor e'lon qilish bizga nima berdi? Birinchidan, biz klassda konstruktorni amalga oshirishni unutmaymiz. Ikkinchidan, interfeys aniq ko'rsatadiki, klass konstruktori ikkita parametr qabul qilishi kerak: ko'p emas, kam emas. Bu, shuningdek, bizni tasodifiy xatolardan himoya qiladi.
Nima uchun biz iRectangle alohida interfeysini yaratdik,
Figure interfeysiga konstruktorni qo'shmadikmi?
Chunki barcha figurallar har xil miqdordagi
tomonlarga ega va shuning uchun ularning konstruktorlarida
har xil miqdordagi parametrlar bo'ladi. Shuning uchun bizga
to'g'ridan-to'g'ri to'rtburchaklar uchun alohida, aniqroq interfeys
yaratishga to'g'ri keldi.
iCube interfeysini yarating, u
Kub figurasini tavsiflaydi. Interfeyingiz
kub tomonini parametr sifatida qabul qiladigan konstruktorni,
shuningdek, kub hajmi va sirt yuzasini olish uchun
metodlarni tavsiflasin.
iCube interfeysini amalga oshiradigan
Cube klassini yarating.
iUser interfeysini yarating, u
foydalanuvchini tavsiflaydi. Foydalanuvchining
ismi va yoshi bo'lishi va bu maydonlar
konstruktor parametrlari sifatida uzatilishi taxmin qilinadi.
Interfeyingiz shuningdek, foydalanuvchida
ism va yosh uchun getterlar (lekin setterlar emas) bo'lishini belgilasin.
iUser interfeysini amalga oshiradigan
User klassini yarating.