Մի քանի ինտերֆեյսներ OOP-ում PHP-ում
PHP-ում բազմակի ժառանգում չկա - յուրաքանչյուր
դաս կարող է ունենալ միայն մեկ ծնող:
Սակայն, ինտերֆեյսների դեպքում գործը այլ է կարգավորվում.
յուրաքանչյուր դաս կարող է իրականացնել ցանկացած քանակի
ինտերֆեյսներ: Դրա համար անհրաժեշտ է թվարկել ինտերֆեյսների անունները
ստորակետերով բաժանված՝ implements հիմնաբառից հետո:
Սա ինտերֆեյսների և վերացական դասերի միջև եղած ևս մեկ տարբերություն է. կարելի է իրականացնել բազմաթիվ ինտերֆեյսներ, բայց անհնար է ժառանգել մի քանի վերացական դասեր:
Եկեք փորձենք գործնականում: Ենթադրենք, բացի
iFigure ինտերֆեյսից, մենք ունենք նաև
iTetragon ինտերֆեյսը:
Այս ինտերֆեյսի մեթոդները կիրականացնեն
Quadrate և Rectangle դասերը,
քանի որ դրանք ունեն 4 կողմ, բայց ոչ Disk
դասը:
Ենթադրենք, որ iTetragon ինտերֆեյսը նկարագրում է
բոլոր չորս կողմերի գետտերները
քառանկյունու համար:
<?php
interface iTetragon
{
public function getA();
public function getB();
public function getC();
public function getD();
}
?>
Ենթադրենք նաև, որ մենք ունենք iFigure ինտերֆեյսը,
որը մենք արել էինք ավելի վաղ:
<?php
interface iFigure
{
public function getSquare();
public function getPerimeter();
}
?>
Եկեք անենք, որ Quadrate դասը
իրականացնի երկու ինտերֆեյս: Դրա համար թվարկենք
երկու ինտերֆեյսները ստորակետերով բաժանված՝ implements հիմնաբառից հետո:
<?php
class Quadrate implements iFigure, iTetragon
{
// այստեղ կլինի իրականացումը
}
?>
Հիմա զարգացնենք մեր Quadrate դասը,
որպեսզի այն իրականացնի iTetragon ինտերֆեյսը:
Հասկանալի է, որ մեր քառակուսին դեգեներատիվ
դեպք է քառանկյունու, քանի որ քառակուսու
բոլոր կողմերը հավասար են: Ուստի բոլոր նոր մեթոդները
կվերադարձնեն նույն բանը՝ քառակուսու լայնությունը:
<?php
class Quadrate implements iFigure, iTetragon
{
private $a;
public function __construct($a)
{
$this->a = $a;
}
public function getA()
{
return $this->a;
}
public function getB()
{
return $this->a;
}
public function getC()
{
return $this->a;
}
public function getD()
{
return $this->a;
}
public function getSquare()
{
return $this->a * $this->a;
}
public function getPerimeter()
{
return 4 * $this->a;
}
}
?>
Ակնհայտ է, որ ուղղանկյունում արդեն ոչ բոլոր
կողմերն են նույնը, այլ միայն հակադիրները:
Այս դեպքում նոր մեթոդները մի փոքր կտարբերվեն:
Դե, և ինչ-որ տրապեզի դեպքում
ընդհանրապես բոլոր 4 կողմերը կլինեն տարբեր:
Սակայն, կարևոր չէ, թե ինչ պատկեր մենք կդիտարկենք - կարևորն այն է, որ այս բոլոր պատկերները կունենան նկարագրված մեթոդները (թող որոշ պատկերներ լինեն դեգեներատիվ) և կաշխատեն միատեսակ:
Անեք, որ Rectangle դասը
նույնպես իրականացնի երկու ինտերֆեյս՝ هم iFigure,
و iTetragon:
Ստեղծեք iCircle ինտերֆեյսը հետևյալ մեթոդներով.
getRadius և getDiameter:
Անեք, որ Disk դասը նույնպես
իրականացնի երկու ինտերֆեյս՝ هم iFigure,
و iCircle: