Mi az a polimorfizmus, és hogyan használják a PHP programozásban?
sobes.tech MI
Válasz az MI-től
A polimorfizmus az a képesség, hogy ugyanazt a felületet különböző adattípusokra használjuk. PHP-ben ez több formában nyilvánul meg:
-
Öröklődés (Al-típus polimorfizmus): Az alosztályok felülírhatják a szülőosztály módszereit, saját implementációt biztosítva. Amikor egy módszert hívunk egy alap típusú objektumon, valójában az adott alosztály módszere kerül végrehajtásra, az objektum típusától függően.
<?php class Animal { public function makeSound() { echo "Általános állati hang\n"; } } class Dog extends Animal { public function makeSound() { echo "Vau!\n"; } } class Cat extends Animal { public function makeSound() { echo "Miau!\n"; } } function makeAnimalSound(Animal $animal) { $animal->makeSound(); // A megfelelő altípus módszerének hívása } $dog = new Dog(); $cat = new Cat(); makeAnimalSound($dog); // Kimenet: Vau! makeAnimalSound($cat); // Kimenet: Miau! -
Interfészek (Interfész polimorfizmus): Különböző osztályok implementálhatják ugyanazt az interfészt, ígérve, hogy ugyanazt a módszerkészletet biztosítják ugyanazzal a szignatúrával. Ez lehetővé teszi, hogy különböző osztályobjektumokkal dolgozzunk egy közös interfészen keresztül.
<?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) { // Ellenőrzés az interfészre $totalArea += $shape->getArea(); } } return $totalArea; } $shapes = [new Circle(5), new Square(4)]; echo calculateTotalArea($shapes); // A kör és a négyzet területének összegét mutatja -
Absztrakt osztályok (Absztrakt osztály polimorfizmusa): Hasonló az interfészen alapuló polimorfizmushoz, de lehetővé teszi alapértelmezett implementációk meghatározását bizonyos módszerekhez.
A polimorfizmus növeli a kód rugalmasságát, bővíthetőségét és karbantarthatóságát, lehetővé téve általános algoritmusok írását, amelyek különböző típusú objektumok gyűjteményeivel dolgoznak egy közös interfészen keresztül.