PHP abstrakt classlar


ULASHISH

PHP - Abstrakt classlar va usullar

Abstrakt class - bu kamida bitta mavhum usulni o‘z ichiga olgan class. An mavhum metod - bu e’lon qilingan, ammo amalga oshirilmaydigan metod mavhum class. Amalga oshirish bolalar classida (sinflarida) amalga oshirilishi kerak.

Mavhum classning maqsadi barcha hosila classlarni (child classlar) ota-classda e’lon qilingan mavhum metod(lar)ni amalga oshirish uchun.

Mavhum class yoki metod abstract kalit so‘zi bilan aniqlanadi.

Keling, bir misolni ko‘rib chiqaylik:

Misol

<?php // Abstract base class abstract class Car {   public $name;   // Non-abstract method   public function __construct($name) {     $this->name = $name;   }   // Abstract method - forces child classes to implement it   abstract public function intro(); } // Child class that extends the abstract class class Audi extends Car {   public function intro() {     return "German quality! I'm an $this->name!";   } } // Child class that extends the abstract class class Citroen extends Car {   public function intro() {     return "French extravagance! I'm a $this->name!";   } } // Create objects of the child classes $audi = new audi("Audi"); echo $audi->intro(); echo "<br>"; $citroen = new citroen("Citroen"); echo $citroen->intro(); ?>
O‘zingiz sinab ko‘ring »

Misol tushuntirildi

Audi va Citroen classlari mavhum Avtomobil classidan meros bo‘lib qolgan. Bu shuni anglatadiki, Audi va Citroen classlari meros tufayli umumiy $name xususiyatidan hamda Car sinfidagi public __construct() usulidan foydalanishi mumkin.

Bundan tashqari, intro() barcha bolalar sinflarida qo‘llanilishi kerak bo‘lgan mavhum usuldir.

Abstrakt classlar bo‘yicha eslatmalar

Mavhum classdan meros bo‘lganda, bolalar class usuli bir xil nom va bir xil yoki kamroq cheklangan kirish modifikatori bilan aniqlanishi kerak. Shunday qilib, agar mavhum metod himoyalangan deb ta’riflangan bo‘lsa, bolalar klassi usuli himoyalangan yoki umumiy sifatida belgilanishi kerak, lekin shaxsiy emas. Bundan tashqari, talab qilinadigan argumentlarning turi va soni bir xil bo‘lishi kerak. Biroq, bolalar sinflarida qo‘shimcha ravishda ixtiyoriy dalillar bo‘lishi mumkin.

Shunday qilib, agar bolalar classi mavhum classdan meros bo‘lib o‘tgan bo‘lsa, bizda quyidagi qoidalar mavjud:

  • Child class usuli bir xil nom bilan aniqlanishi kerak va u ota-mavhum usulni qayta e’lon qiladi
  • Bolalar classi usuli bir xil yoki kamroq cheklangan kirish modifikatori bilan aniqlanishi kerak
  • Kerakli argumentlar soni bir xil bo‘lishi kerak. Biroq, bolalar classida qo‘shimcha ravishda ixtiyoriy dalillar bo‘lishi mumkin


PHP - Argument bilan abstrakt metod

Keling, mavhum usulda argumentga ega bo‘lgan boshqa misolni ko‘rib chiqaylik:

Misol

<?php abstract class ParentClass {   // Abstract method with an argument   abstract protected function prefixName($name); } class ChildClass extends ParentClass {   public function prefixName($name) {     if ($name == "John Doe") {       $prefix = "Mr.";     } elseif ($name == "Jane Doe") {       $prefix = "Mrs.";     } else {       $prefix = "";     }     return "$prefix $name";   } } $class = new ChildClass; echo $class->prefixName("John Doe"); echo "<br>"; echo $class->prefixName("Jane Doe"); echo "<br>"; echo $class->prefixName("Baby Doe"); ?>
O‘zingiz sinab ko‘ring »

Quyidagi misolda bolalar classida ota-onaning abstrakt usulida aniqlanmagan ikkita ixtiyoriy argument mavjud:

Misol

<?php abstract class ParentClass {   // Abstract method with an argument   abstract protected function prefixName($name); } class ChildClass extends ParentClass {   // The child class may define optional arguments that are not in the parent's abstract method   public function prefixName($name, $separator = ".", $greet = "Dear") {     if ($name == "John Doe") {       $prefix = "Mr";     } elseif ($name == "Jane Doe") {       $prefix = "Mrs";     } else {       $prefix = "";     }     return "$greet $prefix$separator $name";   } } $class = new ChildClass; echo $class->prefixName("John Doe"); echo "<br>"; echo $class->prefixName("Jane Doe"); ?>
O‘zingiz sinab ko‘ring »

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!