Δήλωση Κατασκευαστή σε Διεπαφή στην Αντικειμενοστραφή Προγραμματισμό στην 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.