PHP OOP da abstrakt sinf

A

Ushbu maqolada biz PHPda abstrakt sinfni o'rganamiz.

PHPda abstrakt sinf nima?

Abstrakt sinf usullar deklaratsiyasini o'z ichiga oladi, lekin ularning ta'rifini emas. Unda faqat ularning ismlari mavjud. Bu usullarni aniqlash bolalar sinfining zimmasidadir.

Abstrakt usul nima?

Abstrakt usul - mavhum kalit so'zlar yordamida e'lon qilinadigan va tanasini o'z ichiga olmaydigan mavhum sinfning usuli. U bolaning sinfiga qarab belgilanadi.

  • mavhum kalit so'z mavhum sinf yoki usulni e'lon qilish uchun ishlatiladi.
  • Mavhum sinf kamida bitta mavhum usulni o'z ichiga olishi kerak. Biroq, u mavhum bo'lmagan usullarni ham o'z ichiga olishi mumkin.

Syntax

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

PHPda abstrakt sinf qoidalari qanday?

  • Mavhum sinf kamida bitta mavhum usulni o'z ichiga olishi kerak. Biroq, u mavhum bo'lmagan usullarni ham o'z ichiga olishi mumkin.
  • Mavhum ota-klassni meros qilib olgan bola chaqirilganda, u bir xil nomdagi ota-klassning mavhum usullarini belgilashi kerak.
  • Bolalar sinfidagi asbtract usullarini belgilashda uni kamroq cheklangan kirish modifikatori bilan aniqlash kerak. Masalan, agar ota-sinfda mavhum usul mavjud bo'lsa himoyalangan kirish modifikatori. Shunday qilib, bolalar sinfi ushbu usulni aniqlaganda, u o'z kirish modifikatorini ikkalasi sifatida saqlashi kerak himoyalangan or ijtimoiy. Uni o'rnatolmaydi shaxsiy, chunki u himoyalanganidan ko'ra ko'proq cheklangan.
  • Mavhum usulni belgilaydigan bolalar sinfi asosiy asbtract sinfidagi deklaratsiyada ko'rsatilgandek teng miqdordagi argumentlardan o'tishi kerak. Biroq, bolalar sinfida talab qilinadiganlardan tashqari ixtiyoriy/qo'shimcha argumentlar bo'lishi mumkin.

PHPda Abstrakt sinfiga misol

<?php
// Parent abstract class
abstract class Bike {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function introduction() : string;
}

// Child classes defining the parent classes
class Honda extends Bike {
  public function intro() : string {
    return "I am $this->name!";
  }
}

class Suzuki extends Bike {
  public function introduction() : string {
    return "I am $this->name!";
  }
}

// Objects from child classes
$honda = new honda("Honda");
echo $honda->introduction();

$suzuki= new suzuki("Suzuki");
echo $suzuki->introduction();

?>

Yuqoridagi misolni tushuntirish

  • Yuqoridagi misolda biz mavhum sinf yaratamiz Bike mavhum usulni o'z ichiga oladi kirish.
  • Biz ikkita bolalar sinfini yaratamiz Honda va Suzuki mavhum sinfni kengaytiradi va kirish usulini belgilaydi.
  • Biz ushbu sinflarning ob'ektlarini yaratamiz va ularning ob'ektlari yordamida kirish usulini chaqiramiz. Kirish usuli tegishli sinf tomonidan berilgan amalga oshirishga muvofiq ishlaydi.

Usulni bekor qilishda qo'shimcha argumentlar bilan mavhum sinfga misol



<?php
// Parent abstract class
abstract class Bike {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract protected function introduction($model) : string;
}

// Child classes defining the parent classes
class Honda extends Bike {
  public function intro($model) : string {
    return "I am $this->name. My model is $model";
  }
}

class Suzuki extends Bike {
  public function introduction($model, $color=null) : string {
    return "I am $this->name. My model is $model and color is $color";
  }
}

// Objects from child classes
$honda = new honda("Honda");
echo $honda->introduction();

$suzuki= new suzuki("Suzuki");
echo $suzuki->introduction();
?>

Yuqoridagi misolni tushuntirish

  • Yuqoridagi misolning asosiy mantig'i avvalgi misolga o'xshaydi. Biroq, kirish usulida funktsiyaga qo'shimcha argumentlar beramiz suzuki sinf.
  • Ushbu qo'llanmada avvalroq qoidani aniqlaganimizdek, ota-klassning mavhum usulini amalga oshirishda bolalar sinfining kirish modifikatori ushbu usulni e'lon qilish uchun asosiy sinfda ko'rsatilganidan kamroq bo'lishi kerak. Shunday qilib, ikkala bola sinfi ham kirish usulini aniqlash uchun umumiy kirish modifikatoridan foydalanadi.
  • Funktsiyani shaxsiy kirish modifikatori bilan aniqlashga harakat qiling, u xatoga olib keladi.

Eslatma: Abstrakt sinfda konstruktor usuli mavjud emas. Shunday qilib, biz mavhum sinf misolini yarata olmaymiz.

Sinf abstraktsiyasi PHP 8 rasmiy hujjatlari.

Fikr qo'shish

Repetitor tarmog'i

PHP tilini A dan Z gacha o'rganing