Sobes.tech
Middle

Ի՞նչ է պոլիմորֆիզմը և ինչպես է այն օգտագործվում PHP ծրագրավորման մեջ։

sobes.tech AI

Պատասխան AI-ից

Պոլիմորֆիզմը՝ դա հնարավորությունն է օգտագործել նույն ինտերֆեյսը տարբեր տվյալների տիպերի համար: PHP-ում այն արտահայտվում է մի քանի ձևերով:

  1. Ներառում (Subtype Polymorphism): Դուստր դասերը կարող են վերագրել ծնողական դասի մեթոդները՝ տրամադրելով իրենց սեփական իրականացմանը: Երբ կանչում եք մեթոդը բազային տիպի օբյեկտի վրա, իրականում կիրականացվի կոնկրետ դուստր դասի մեթոդը՝ կախված օբյեկտի տիպից:

    <?php
    
    class Animal {
        public function makeSound() {
            echo "Ընդհանուր կենդանու ձայն\n";
        }
    }
    
    class Dog extends Animal {
        public function makeSound() {
            echo "Հաու!\n";
        }
    }
    
    class Cat extends Animal {
        public function makeSound() {
            echo "Մյաու!\n";
        }
    }
    
    function makeAnimalSound(Animal $animal) {
        $animal->makeSound(); // Կոչվում է համապատասխան ենթատեսակի մեթոդը
    }
    
    $dog = new Dog();
    $cat = new Cat();
    
    makeAnimalSound($dog); // Ելք՝ Հաու!
    makeAnimalSound($cat); // Ելք՝ Մյաու!
    
  2. Ինտերֆեյսներ (Interface Polymorphism): Տարբեր դասեր կարող են իրականացնել նույն ինտերֆեյսը, խոստանալով տրամադրել որոշակի մեթոդների հավաքածու՝ նույն սիգնատուրայով: Սա թույլ է տալիս աշխատել տարբեր դասերի օբյեկտների հետ՝ միևնույն ինտերֆեյսի միջոցով:

    <?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) { // Ստուգում՝ համապատասխանում է ինտերֆեյսին
                $totalArea += $shape->getArea();
            }
        }
        return $totalArea;
    }
    
    $shapes = [new Circle(5), new Square(4)];
    echo calculateTotalArea($shapes); // Կցուցադրվի շրջանագծի և քառակուսի մակերեսների գումարը
    
  3. Աբստրակտ դասեր (Abstract Class Polymorphism): Դասեր, որոնք նման են ինտերֆեյսների վրա հիմնված պոլիմորֆիզմին, բայց թույլ են տալիս որոշ մեթոդների համար սահմանել հիմնական իրականացում:

Պոլիմորֆիզմը մեծացնում է ճկունությունը, ընդարձակելիությունը և կոդի պահպանելիությունը, թույլ է տալիս գրել ընդհանուր ալգորիթմներ, որոնք աշխատում են տարբեր տիպերի օբյեկտների հավաքածուների հետ՝ միևնույն ինտերֆեյսի միջոցով։