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): Интерфейстерге негизделген полиморфизмге окшош, бирок кээ бир методдор үчүн негизги ишке ашырууну аныктоого мүмкүндүк берет.

Полиморфизм кодуңуздун ийкемдүүлүгүн, кеңейтиңдүүлүгүн жана колдоосун жогорулатат, ар кандай типтеги объекттердин топтомдору менен иштөө үчүн жалпы алгоритмдер жазууга мүмкүндүк берет, бирдиктүү интерфейс аркылуу.