Sobes.tech
Middle

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:

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