⊗ppOpIfSII 73 of 107 menu

Πολλαπλές Διεπαφές στην ΑΝΠ στη PHP

Στη PHP δεν υπάρχει πολλαπλή κληρονομικότητα - κάθε κλάση μπορεί να έχει μόνο ένα γονέα. Με τις διεπαφές, ωστόσο, τα πράγματα είναι διαφορετικά: κάθε κλάση μπορεί να υλοποιήσει οποιονδήποτε αριθμό διεπαφών. Για να γίνει αυτό, τα ονόματα των διεπαφών πρέπει να αναγραφούν χωρισμένα με κόμματα μετά από την λέξη-κλειδί implements.

Αυτή είναι ακόμη μια διαφορά των διεπαφών από τις αφηρημένες κλάσεις - μπορούμε να υλοποιήσουμε πολλές διεπαφές, αλλά δεν μπορούμε να κληρονομήσουμε πολλές αφηρημένες κλάσεις.

Ας δοκιμάσουμε στην πράξη. Ας υποθέσουμε ότι εκτός από τη διεπαφή iFigure έχουμε επίσης τη διεπαφή iTetragon. Οι μέθοδοι αυτής της διεπαφής θα υλοποιηθούν από τις κλάσεις Quadrate και Rectangle, αφού έχουν 4 πλευρές, αλλά όχι από την κλάση Disk.

Ας υποθέσουμε ότι η διεπαφή iTetragon περιγράφει μεθόδους λήψης (getters) και για τις τέσσερις πλευρές ενός τετραπλεύρου:

<?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.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη