PHP OOP da meros

PHP da kirish modifikatorlari
PHP OOP da doimiylar

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?

Sinf yordamida meros qilib olinishi mumkin uzayadi kalit so'z. Quyidagi misolga qarang.

<?php
class Fruit {
    protected $name;
    protected $color;

    public function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }

    public function getName() {
        return $this->name;
    }

    public function getColor() {
        return $this->color;
    }
}

class Apple extends Fruit {
    protected $variety;

    public function __construct($name, $color, $variety) {
        parent::__construct($name, $color);
        $this->variety = $variety;
    }

    public function getVariety() {
        return $this->variety;
    }
}

$apple = new Apple('Apple', 'Red', 'Fuji');
echo $apple->getName(); // Output: Apple
echo $apple->getColor(); // Output: Red
echo $apple->getVariety(); // Output: Fuji
?>

Ushbu misolda Apple sinfi uzayadi Fruit klassi, ya'ni Apple sinfi o'ziga xos xususiyatga qo'shimcha ravishda Fruit sinfining barcha atributlari va usullarini o'z ichiga oladi. Apple sinfi konstruktori tegishli parametrlarni taqdim etgan holda ota-konstruktorni chaqirish uchun parent:: construct() funksiyasidan foydalanadi. Keyin, merosdan foydalanib, siz Apple sinfining namunasini yaratishingiz va asosiy sinfdan funktsiyaga kirishingiz mumkin.

Yuqoridagilarni umumlashtirish uchun:

  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 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 ma'lum bir jamoat xususiyatlariga va himoyalangan funktsiyaga ega bo'lgan meva deb ataladigan sinfni qilamiz.
  • Biz yana bir sinf, olma quramiz, u Fruitdan cho'zilgan va o'z misoliga ega.
  • Biz Fruit sinfining himoyalangan usuliga olma klassi ob'ekti yordamida kirishga harakat qilsak, u xato beradi, chunki biz hosil qilingan sinfdan tashqari Fruit sinfining himoyalangan a'zosiga kirishga harakat qilmoqdamiz.

Keling, boshqa misolni ko'rib chiqaylik, bu oxirgisining biroz o'zgartirilgan versiyasidir.

<?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();
?>

Oldingi misoldagi sinf ichida biz unga kirishimiz sababli, Fruit sinfining himoyalangan usuli olma sinfida mavjud.

Merosda bekor qilish

Qayta belgilash ota-onalar sinfining bir xil nomdagi bolalar sinflarida usullarini qayta belgilashni anglatadi. Quyidagi merosni bekor qilish misolini ko'rib chiqing.

<?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:

  • Qayta belgilash bolalar sinflaridagi ota-ona sinfining usullarini qayta nomlashni anglatadi. Merosda bekor qilishning quyidagi misolini ko'rib chiqing.
  • Shuni ta'kidlash kerakki, olma bolalar sinfidagi __construct va intro usullari bir xil nomga ega. Biroq, parametrlar farq qilishi mumkin.
  • Biz olma sinfining namunasini yaratamiz va argumentlarni qurish usuliga yuboramiz.
  • Biz apple klassi konstruktori yordamida apple ob'ekt namunasini yaratganimiz uchun, biz olma misoli yordamida intro usulini chaqirganimizda, u olma sinfining kirish funktsiyasini chaqiradi.

Yakuniy kalit so'zning merosda tutgan o'rni

Yakuniy kalit so'z bola/olma sinfga ota-ona/asosiy sinf funksiyasini bekor qilishni taqiqlaydi. Final kalit so'zi qanday ishlatilishini ko'rish 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
  }
}
?>

Apple sinfi oldingi misoldagi kirish usulini bekor qilishga harakat qiladi. Fruit sinfining kirish funktsiyasi bilan yakuniy kalit so'zni ishlatganimiz uchun u xatoga yo'l qo'yadi.

Agar siz PHP merosi haqida ko'proq o'qishni istasangiz, biz quyidagilarni tavsiya qilamiz rasmiy qo'llanma.

Savol-javob

Savol: PHP OOP da meros nima?
Javob: PHP OOP da meros yangi sinfga oldingi sinfning atributlari va usullarini meros qilib olish imkonini beruvchi tizimdir. Bu shuni anglatadiki, yangi sinf ota-sinfning kodini va funksionalligini qayta ishlatishi va o'ziga xos yangi xususiyatlar va usullarni qo'shishi mumkin.

Savol: PHPda boshqa sinfdan meros bo‘lgan sinfni qanday aniqlash mumkin?
Javob: PHPda “extends” kalit so‘zi boshqa sinfdan meros bo‘lgan sinfni aniqlash uchun ishlatiladi. Misol uchun, agar sizda "ParentClass" ota-sinfingiz bo'lsa va undan meros bo'lib qolgan "ChildClass" bolalar sinfini yaratmoqchi bo'lsangiz, quyidagilarni yozishingiz mumkin:

class ChildClass extends ParentClass {
  // properties and methods
}

Savol: PHPda sinf ko'plab sinflardan meros bo'lishi mumkinmi?
Javob: Yo'q, PHPda sinf faqat bitta sinfdan meros bo'lishi mumkin. Biroq, interfeyslar ekvivalent funksiyalarni ta'minlash uchun ishlatilishi mumkin va sinf ko'plab interfeyslarni amalga oshirishi mumkin.

Savol: Bolalar sinfidagi usulni bekor qilish mumkinmi?
Javob: Ha, siz bir xil nomdagi usul yaratish orqali bolalar sinfidagi usulni bekor qilishingiz mumkin. Bolalar sinfi ob'ektida chaqirilganda, ota-sinf usuli o'rniga bolalar sinf usuli qo'llaniladi.

Savol: Bolalar sinfidan ota-ona sinf usulini chaqirish mumkinmi?
Javob: Ha, siz “ota-ona” kalit soʻzidan soʻng qoʻshimcha doirani aniqlash operatori (::) va usul nomidan ota-sinf usulini bolalar sinfidan chaqirish uchun foydalanishingiz mumkin. Misol tariqasida:

class ChildClass extends ParentClass {
  public function childMethod() {
    parent::parentMethod();
  }
}

mashqlar:

  1. PHPda qaysi kalit so'z sinfning boshqa sinfdan meros bo'lib qolganligini ko'rsatish uchun ishlatiladi?
  2. Bolalar sinfidagi ota-sinfdan usul yoki xususiyatga qanday kirishingiz mumkin?
  3. Qanday qilib bolalar sinfining konstruktori ichida ota-sinf konstruktorini chaqirish mumkin?
  4. Qanday qilib usul yoki xususiyatni bolalar sinfida bekor qilinishini oldini olish mumkin?
  5. O'rtasidagi farq nima extends va implements PHP da kalit so'zlar?

javoblar:

  1. The extends kalit so'z PHP da sinfning boshqa sinfdan meros bo'lib qolganligini ko'rsatish uchun ishlatiladi.
  2. dan foydalanib, bolalar sinfidagi ota-klassdagi usul yoki xususiyatga kirishingiz mumkin parent:: kalit so'z, undan keyin usul yoki xususiyat nomi.
  3. dan foydalanib, siz asosiy sinf konstruktoriga bolalar sinfining konstruktori ichida qo'ng'iroq qilishingiz mumkin parent::__construct() usuli.
  4. dan foydalanib, usul yoki xususiyatni bolalar sinfida bekor qilinishini oldini olishingiz mumkin final ota-klassdagi usul yoki mulk deklaratsiyasidan oldin kalit so'z.
  5. The extends kalit so'z sinfning boshqa sinfdan meros bo'lib qolganligini ko'rsatish uchun ishlatiladi implements kalit so'z sinf interfeysni amalga oshirayotganligini ko'rsatish uchun ishlatiladi.
PHP da kirish modifikatorlari
PHP OOP da doimiylar
en English
X
Top o'ting