Sobes.tech
Middle

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:

  1. Ö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!
    
  2. 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
    
  3. 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.