PHPде ООПде интерфейсте конструкторду жарыялоо
Интерфейсте класс конструкторун да жарыялоого болот.
Мисал менен карайлы. Биз эки параметр алуучу конструктору,
аянтын, периметрин табуу ыкмалары бар Rectangle
классын жасоону чечтик деп коёлу.
Келгиле, биздин классыбызды интерфейс аркылуу сүрөттөйлү:
<?php
interface iRectangle
{
public function __construct($a, $b); // эки параметрлүү конструктор
public function getSquare();
public function getPerimeter();
}
?>
Келгиле, 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);
}
}
?>
Интерфейсте конструкторду жарыялоо бизге эмне берди? Биринчиден, биз классында конструкторду ишке ашырууну унутпайбыз. Экинчиден, интерфейс класс конструктору эки параметр алууга тийиш экендигин ачык көрсөтөт: көп эмес, аз эмес. Бул бизди кокустан кетирилген катадан сактайт.
Эмне үчүн биз бөлөк iRectangle интерфейсин түздүк,
Figure интерфейсине конструкторду кошкон эмеспи?
Себеби, бардык фигуралар ар кандай жактар санына ээ жана, тиешелүү түрдө, конструктордо ар кандай параметрлер санына ээ. Ошондуктан бизге бөлөк, так тик бурчтуктар үчүн өзгөчө интерфейс түзүүгө туура келди.
iCube интерфейсин жасагыла, ал Куб фигурасын сүрөттөсүн.
Сиздин интерфейсиңиз кубдун капталын параметр катары кабыл алган конструкторду, ошондой эле кубдун көлөмүн жана бетинин аянтын алуу ыкмаларын сүрөттөсүн.
iCube интерфейсин ишке ашырган Cube классын жасагыла.
iUser интерфейсин жасагыла, ал колдонуучуну сүрөттөсүн.
Колдонуучунун аты жана жашы бар деп болжолдонууда жана бул талаалар конструкторго параметрлер катары өткөрүлөт деп айтылат.
Сиздин интерфейсиңиз ошондой эле колдонуучунун аты жана жашы үчүн getterлер (бирок setterлер эмес) болушун талап кылсын.
iUser интерфейсин ишке ашырган User классын жасагыла.