PHP OOP da meros

I

Meros nima?

Agar sinf boshqa sinfdan kelib chiqsa, u meros sifatida tanilgan. Quyida PHP da merosga oid muhim atamalar keltirilgan.

  • Ota-onalar sinfi – Boshqa sinflar olingan sinf ota-klass deb ataladi. U asosiy sinf sifatida ham tanilgan.
  • Bolalar sinfi – Boshqa sinfdan olingan sinf bola sinf deb ataladi. Uning barg sinfi yoki hosila sinfi kabi boshqa nomlari ham bor.
PHP da meros

PHP da sinfni qanday meros qilib olish mumkin?

Sinfni foydalanish orqali meros qilib olish mumkin uzayadi kalit so'z. Quyidagi misolga qarang.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Apple is inherited from Fruit
class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one? ";
  }
}
$apple= new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

Yuqoridagi misolda

  • Biz ba'zi xususiyatlar va usullarga ega bo'lgan asosiy yoki ota-onalar sinfini yaratamiz.
  • Extens kalit so'zidan foydalanib, Fruit ota-klassini kengaytiruvchi/meros oladigan boshqa sinf olma yaratamiz.
  • Olma misolini/obyektini yarating va merosdan foydalanib meva klassi usuliga kiring.

PHP-da merosga kirishni yakunlab, biz siz uchun quyidagi fikrlarni to'playmiz.

  1. Meros bolalar sinfiga ota-sinfning umumiy __konstruktsiyasi, usullari va xususiyatlariga kirish imkonini beradi.
  2. Yuqoridagi misolda biz apple klassi usuliga uning ob'ekti yordamida kirishimiz mumkin, shuningdek, ota-klassning usullari.

Merosdagi himoyalangan kirish modifikatorlari doirasi

Oldingi qo'llanmada biz sinfning himoyalangan atributlari/usullari sinf va undan olingan sinflar ichida foydalanish mumkinligini bilib oldik.

Merosdagi himoyalangan kirish modifikatorlari doirasini tushunish uchun avval quyidagi misolni ko'rib chiqamiz.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am $this->name and my color is $this->color";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one?";
  }
}

$apple = new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

Yuqoridagi misolda:

  • Biz ba'zi umumiy atributlar va himoyalangan usul bilan sinf mevasini yaratamiz.
  • Biz boshqa sinf olma yaratamiz, Fruit sinfidan tarqalib, uning namunasini yaratamiz.
  • Biz olma klassi obyekti yordamida Fruite sinfining himoyalangan usuliga kirishga harakat qilsak, u xato beradi, chunki biz Fruit sinfining himoyalangan a'zosiga olingan sinfdan tashqari kirishga harakat qilmoqdamiz.

Keling, yuqoridagi misoldan biroz o'zgartirilgan boshqa misolga o'tamiz.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "Am I a fruit or an apple? ";
    $this -> intro(); // protected
  }
}

$apple = new Apple("Apple", "red");
$strawberry->message();
?>

Yuqoridagi misolda Fruit sinfining himoyalangan usuli olma sinfida foydalanish mumkin, chunki biz unga sinf ichida kiramiz.

Merosda bekor qilish

Qayta tiklash bir xil nomdan foydalanib, bolalar sinflarida ota-ona sinfining usullarini qayta belgilashga ishora qiladi. Quyidagi merosni bekor qilishning quyidagi misoliga qarang.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "I am {$this->name}, my color is {$this->color}. Also, my weight is {$this->weight} kg.";
  }
}

$apple= new Apple("Apple", "red", 50);
$apple->intro();
?>

Yuqoridagi misolda:

  • Biz meva sinfini kengaytiruvchi va undagi __conruct va kirish usullarini qayta belgilovchi ota-ona klassi Fruit va bolalar sinfini yaratamiz.
  • E'tibor bering, "Apple" bolalar sinfi bir xil nomdagi __construct va intro usullarini belgilaydi. Biroq, parametrlar boshqacha bo'lishi mumkin.
  • Biz olma klassi intansiyasini yaratamiz va parametrlarni konstruksiya funktsiyasiga o'tkazamiz.
  • Biz apple misolidan foydalangan holda intro usulini chaqirganimizda, u apple sinfining kirish usulini chaqiradi, chunki biz olma ob'ektining misolini apple sinfi konstruktori yordamida yaratdik.

Yakuniy kalit so'zning merosda tutgan o'rni

The final kalit so'z bola/hosil sinfning ota-ona/asosiy sinf usulini bekor qilishiga yo'l qo'ymaydi. Final kalit so'zidan foydalanishni tushunish uchun quyidagi misolga qarang.

<?php
class Fruit {
  final public function intro() {
    // code
  }
}

class Apple extends Fruit {
// error to override the intro
  public function intro() {
    // code
  }
}
?>

Yuqoridagi misolda olma klassi kirish usulini bekor qilishga harakat qiladi. Bu xato beradi, chunki biz Fruit sinfining kirish usuli bilan yakuniy kalit so'zdan foydalanganmiz.

Rasmiy uchun bosing PHP merosiga havola.

Xulosa

Meros nafaqat PHPda OOP ning muhim tushunchasi, balki har qanday tilda muhim rol o'ynaydi. Suhbat nuqtai nazaridan, meros savollari juda muhim. Shunday qilib, siz merosni o'zingiz mashq qilishingiz kerak.

Fikr qo'shish

Repetitor tarmog'i

PHP tilini A dan Z gacha o'rganing