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
   55   56   57   58   59   60   61   62   63   64   65