АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗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, які ўяўляе сабой геаметрычную фігуру. Хай ад яго наследуе класы для круга, прамавугольніка і квадрата.

byenru