⊗ppOpFnCl 63 of 107 menu

Абстрактни класове в ООП в PHP

Да предположим, че имате клас User, а от него наследяват класове Employee и Student.

Като се предполага, че ще създавате обекти от класове Employee и Student, но обекти от клас User - няма да създавате, тъй като този клас се използва само за групиране на общи свойства и методи на неговите наследници.

В този случай можете принудително да забраните създаването на обекти от клас User, така че вие или друг програмист някъде случайно да не ги създадете.

За това съществуват така наречените абстрактни класове. Абстрактните класове са класове, предназначени за наследяване от тях. В този случай обекти от такива класове не могат да бъдат създавани.

За да декларирате клас като абстрактен, трябва при неговата декларация да напиете ключовата дума abstract:

<?php abstract class User { } ?>

И така, нека напием реализация на абстрактния клас User. Да предположим, че той има частно свойство name, както и гетъри и сетъри за него:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } } ?>

Опит за създаване на обект от клас User ще предизвика грешка:

<?php $user = new User; // ще даде грешка ?>

Но наследяването от нашия клас ще е възможно. Нека направим клас Employee, който ще наследява от нашия абстрактен клас User:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } } ?>

Нека създадем обект от клас Employee - всичко ще работи:

<?php $employee = new Employee; $employee->setName('john'); // метод на родителя, т.е. на клас User $employee->setSalary(1000); // собствен метод, т.е. на клас Employee echo $employee->getName(); // ще изведе 'john' echo $employee->getSalary(); // ще изведе 1000 ?>

Направете абстрактен клас Figure, представляващ геометрична фигура. Нека от него наследяват класове за кръг, правоъгълник и квадрат.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне