Page 60 - 4636
P. 60
$b->operationl();
$b->attributel = 10;
$b->operation2 ();
$b->attribute2 = 10;
Зверніть увагу, що оскільки клас є розширенням класу А, ми можемо посилатися на операцію
operationl() і атрибут $attributel, незважаючи на те, що вони були оголошені в класі А.
Будучи підкласом класу А, клас володіє всією функціональністю і даними класу А. Поряд з цим, клас
оголошує свій власний атрибут і операцію. Важливо відзначити, що спадкування працює тільки в
одному напрямку. Підклас, або дочірній клас наслідує властивості батьківського класу, або
суперкласу, однак батьківський клас не отримує властивостей свого дочірнього класу. Це означає, що
двa останні рядки в такому фрагменті коду помилкові:
$а = new А() ;
$a->operationl() ;
$?->attributel = 10;
$a->operation2() ;
$a->attribute2 = 10;
Клас А не має ні операції operation2, ні атрибута attribute2.
Керування видимістю при спадкуванні за допомогою модифікаторів private і protected
Модифікатори доступу private і protected можуть використовуватися для управління спадкуванням.
Якщо атрибут або метод визначений як private, він не успадковується. Якщо ж атрибут або метод
визначений як protected, він успадковується, однак невидимий ззовні класу (подібно елементу private).
Розглянемо наступний приклад:
class А {
privatefunctionoperationl1 {
echo "Викликана операція operationl";
}
protected function operation2 {
echo "Викликана операція operation2";
}
public function operation3 () {
echo " Викликана операція operation3";
}
}
class В extends A {
functionconstruct() {
$this->operationl0;
$this->operation2 0;
$this->operation3 ();
}
}
$b = new B;
Цей код створює в класі А по одній операції кожного типу public, protected і private. Клас
успадковується від класу А. У межах конструктора класу В робляться спроби звернутися до операцій
батьківського класу. Рядок$this->operationl();призводить до фатальної помилки:
Цей приклад показує, що приватні операції, визначені в батьківському класі, можна викликати з
дочірнього класу. Якщо закоментувати рядок коду, інші два будуть працювати нормально. Функція з
модифікатором protected успадковується, однак може використовуватися тільки усередині дочірнього
класу, що, власне, і зроблено. У результаті додавання наступного рядка:$b->operation2(); в
кінець файлу, буде згенерована така помилка: Fatal error: Разом з тим, операцію operation3 () можна
викликати і за межами класу:$b->operation3(); Цей виклик можливий, оскільки operation3 ()
оголошена як public.
57