Τι είναι ο πολυμορφισμός και πώς χρησιμοποιείται στον προγραμματισμό PHP;
sobes.tech AI
Απάντηση από AI
Ο πολυμορφισμός είναι η δυνατότητα χρήσης μιας και ίδιας διεπαφής για διαφορετικούς τύπους δεδομένων. Στην PHP, εκδηλώνεται με διάφορες μορφές:
-
Κληρονομικότητα (Πολυμορφισμός υποτύπου): Οι υποκλάσεις μπορούν να υπερεκτείνουν τις μεθόδους της βασικής κλάσης, παρέχοντας τη δική τους υλοποίηση. Όταν καλείται μια μέθοδος σε ένα αντικείμενο τύπου βάσης, στην πραγματικότητα εκτελείται η μέθοδος της συγκεκριμένης υποκλάσης, ανάλογα με τον τύπο του αντικειμένου.
<?php class Animal { public function makeSound() { echo "Γενικός ήχος ζώου\n"; } } class Dog extends Animal { public function makeSound() { echo "Γαύ!\n"; } } class Cat extends Animal { public function makeSound() { echo "Μιάου!\n"; } } function makeAnimalSound(Animal $animal) { $animal->makeSound(); // Κλήση της μεθόδου του συγκεκριμένου υποτύπου } $dog = new Dog(); $cat = new Cat(); makeAnimalSound($dog); // Έξοδος: Γαύ! makeAnimalSound($cat); // Έξοδος: Μιάου! -
Διεπαφές (Πολυμορφισμός μέσω διεπαφής): Διάφορες κλάσεις μπορούν να υλοποιούν την ίδια διεπαφή, υπόσχοντας να παρέχουν ένα ορισμένο σύνολο μεθόδων με την ίδια υπογραφή. Αυτό επιτρέπει την εργασία με αντικείμενα διαφορετικών κλάσεων μέσω μιας κοινής διεπαφής.
<?php interface Shape { public function getArea(); } class Circle implements Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } public function getArea() { return pi() * $this->radius * $this->radius; } } class Square implements Shape { private $side; public function __construct($side) { $this->side = $side; } public function getArea() { return $this->side * $this->side; } } function calculateTotalArea(array $shapes) { $totalArea = 0; foreach ($shapes as $shape) { if ($shape instanceof Shape) { // Έλεγχος διεπαφής $totalArea += $shape->getArea(); } } return $totalArea; } $shapes = [new Circle(5), new Square(4)]; echo calculateTotalArea($shapes); // Εμφανίζει το άθροισμα των επιφανειών του κύκλου και του τετραγώνου -
Αφηρημένες κλάσεις (Polymorphism με αφηρημένη κλάση): Παρόμοιο με τον πολυμορφισμό βασισμένο σε διεπαφές, αλλά επιτρέπει τον ορισμό βασικής υλοποίησης για ορισμένες μεθόδους.
Ο πολυμορφισμός αυξάνει την ευελιξία, την επεκτασιμότητα και τη διαχειρισιμότητα του κώδικα, επιτρέποντας τη συγγραφή γενικών αλγορίθμων που λειτουργούν με συλλογές αντικειμένων διαφορετικών τύπων μέσω μιας κοινής διεπαφής.