Sobes.tech
Middle

Polimorfizm nima va u PHP dasturlashda qanday ishlatiladi?

sobes.tech AI

AIdan javob

Polimorfizm — bu bir xil interfeysni turli ma'lumot turlari uchun ishlatish imkoniyatidir. PHPda u bir nechta shaklda namoyon bo'ladi:

  1. Merosxo'rlik (Subtip Polimorfizmi): Pastki sinflar ota sinf metodlarini qayta yozishi mumkin, o'z versiyasini taqdim etadi. Asosiy turdagi ob'ektga metod chaqirilganda, aslida, ob'ektning turiga qarab, konkret pastki sinf metodlari bajariladi.

    <?php
    
    class Animal {
        public function makeSound() {
            echo "Umumiy hayvon ovozi\n";
        }
    }
    
    class Dog extends Animal {
        public function makeSound() {
            echo "Hov!\n";
        }
    }
    
    class Cat extends Animal {
        public function makeSound() {
            echo "Miyov!\n";
        }
    }
    
    function makeAnimalSound(Animal $animal) {
        $animal->makeSound(); // Mos keladigan pastki sinf metodini chaqirish
    }
    
    $dog = new Dog();
    $cat = new Cat();
    
    makeAnimalSound($dog); // Chiqish: Hov!
    makeAnimalSound($cat); // Chiqish: Miyov!
    
  2. Interfeyslar (Interfeys Polimorfizmi): Turli sinflar bir xil interfeysni amalga oshirishi mumkin, va shart qiladiki, ular bir xil imzoga ega metodlar to'plamini taqdim etadi. Bu, turli sinf ob'ektlari bilan ishlash imkonini beradi.

    <?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) { // Interfeys tekshiruvi
                $totalArea += $shape->getArea();
            }
        }
        return $totalArea;
    }
    
    $shapes = [new Circle(5), new Square(4)];
    echo calculateTotalArea($shapes); // Doira va kvadrat yuzalarining summasini chiqaradi
    
  3. Abstrakt sinflar (Abstrakt sinf Polimorfizmi): Interfeysga asoslangan polimorfizmga o'xshash, lekin ba'zi metodlar uchun asosiy amalga oshirishni belgilash imkonini beradi.

Polimorfizm kodning moslashuvchanligini, kengaytirilishini va saqlashini oshiradi, umumiy algoritmlarni yozishga imkon beradi, ular turli tipdagi ob'ektlar kolleksiyasi bilan ishlaydi, barchasi umumiy interfeys orqali.