კონსტრუქტორის დეკლარირება ინტერფეისში OOP-ში 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, რომელიც
აღწერს ფიგურას კუბს. დაე, თქვენი ინტერფეისი
აღწერდეს კონსტრუქტორს, რომელიც პარამეტრად იღებს
კუბის გვერდს, ასევე მეთოდებს კუბის მოცულობის
და ზედაპირის ფართობის მისაღებად.
შექმენით კლასი Cube, რომელიც ახორციელებს ინტერფეისს
iCube.
შექმენით ინტერფეისი iUser, რომელიც
აღწერს მომხმარებელს. ვარაუდობენ, რომ
მომხმარებელს ექნება სახელი და ასაკი და ეს ველები
გადაეცემა კონსტრუქტორის პარამეტრებად. დაე,
თქვენი ინტერფეისი ასევე განსაზღვრავს იმას, რომ მომხმარებელს
ექნება გეთერები (მაგრამ არა სეთერები) სახელისა და
ასაკისთვის.
შექმენით კლასი User, რომელიც ახორციელებს ინტერფეისს
iUser.