Mis on polüformism ja kuidas seda kasutatakse PHP programmeerimisel?
sobes.tech AI
Vastus AI-lt
Polümorfism on võimalus kasutada sama liidest erinevat tüüpi andmete jaoks. PHP-s avaldub see mitmel viisil:
-
Pärimine (Subtype Polymorphism): Alamtüübid võivad üle kirjutada vanematüübi meetodeid, pakkudes oma rakendust. Kui meetod kutsutakse välja põhiliikide objekti puhul, siis tegelikult täidetakse konkreetse alamtüübi meetod, sõltuvalt objekti tüübist.
<?php class Animal { public function makeSound() { echo "Üldine looma hääl\n"; } } class Dog extends Animal { public function makeSound() { echo "Hau!\n"; } } class Cat extends Animal { public function makeSound() { echo "Miau!\n"; } } function makeAnimalSound(Animal $animal) { $animal->makeSound(); // Kutsutakse välja vastava alamtüübi meetod } $dog = new Dog(); $cat = new Cat(); makeAnimalSound($dog); // Väljund: Hau! makeAnimalSound($cat); // Väljund: Miau! -
Liidese (Interface Polymorphism): Erinevad klassid võivad rakendada sama liidest, lubades pakkuda kindlat meetodite kogumit sama signatuuriga. See võimaldab töötada erinevat tüüpi objektidega ühe liidese kaudu.
<?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) { // Kontroll liidese vastavust $totalArea += $shape->getArea(); } } return $totalArea; } $shapes = [new Circle(5), new Square(4)]; echo calculateTotalArea($shapes); // Kuvab ringi ja ruudu pindalade summa -
Abstraktsed klassid (Abstract Class Polymorphism): Sarnane liidese põhisele polümorfismile, kuid võimaldab määratleda põhiväljundi teatud meetoditele.
Polümorfism suurendab koodi paindlikkust, laiendatavust ja hooldatavust, võimaldades kirjutada üldisi algoritme, mis töötavad erinevat tüüpi objektide kogumitega ühe liidese kaudu.