Čo je to polymorfizmus a ako sa používa v programovaní v PHP?
sobes.tech AI
Odpoveď od AI
Polymorfizmus je možnosťou používať rovnaké rozhranie pre rôzne dátové typy. V PHP sa prejavuje v niekoľkých formách:
-
Dedičstvo (Subtype Polymorphism): Potomkovia tried môžu prepísať metódy rodičovskej triedy a poskytovať vlastnú implementáciu. Pri volaní metódy na objekte základného typu bude skutočne vykonaná metóda z konkrétneho potomka, v závislosti od typu objektu.
<?php class Animal { public function makeSound() { echo "Obecný zvuk zvieraťa\n"; } } class Dog extends Animal { public function makeSound() { echo "Haf!\n"; } } class Cat extends Animal { public function makeSound() { echo "Mňau!\n"; } } function makeAnimalSound(Animal $animal) { $animal->makeSound(); // Volá sa metóda odpovedajúceho podtypu } $dog = new Dog(); $cat = new Cat(); makeAnimalSound($dog); // Výstup: Haf! makeAnimalSound($cat); // Výstup: Mňau! -
Rozhrania (Interface Polymorphism): Rôzne triedy môžu implementovať rovnaké rozhranie, sľubujúc poskytovanie určitej sady metód so rovnakou signatúrou. To umožňuje pracovať s objektmi rôznych tried cez jednotné rozhranie.
<?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) { // Kontrola na rozhranie $totalArea += $shape->getArea(); } } return $totalArea; } $shapes = [new Circle(5), new Square(4)]; echo calculateTotalArea($shapes); // Vypíše súčet plôch kruhu a štvorca -
Abstraktné triedy (Abstract Class Polymorphism): Podobné polymorfizmu na základe rozhraní, ale umožňuje definovať základnú implementáciu pre niektoré metódy.
Polymorfizmus zvyšuje flexibilitu, rozšíriteľnosť a udržiavateľnosť kódu, umožňuje písať všeobecné algoritmy, ktoré pracujú s kolekciami objektov rôznych typov cez jednotné rozhranie.