Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Суть наследования в php

#php #ооп #наследование


Добрый день. Прошу помощи разобраться в сути наследования языка php.

В мануале есть такой пример:
http://php.net/manual/ru/language.oop5.late-static-bindings.php

foo();
        static::foo();
    }
}

class B extends A {
   /* foo() будет скопирован в В, следовательно его область действия по прежнему А,
      и вызов будет успешен*/
}

class C extends A {
    private function foo() {
        /* исходный метод заменен; область действия нового метода С */
    }
}

$b = new B();
$b->test();
$c = new C();
$c->test();   //не верно
?>


Меня смущает комментарий 


  /* foo() будет скопирован в В, следовательно его область действия по
  прежнему А,
        и вызов будет успешен*/


Что значит скопирован? Скопирован всмысле отнаследован? Но ведь невозможно наследовать
приватные методы и свойства.
И правильно ли я понимаю что вызвать $b->foo() нельзя как раз потому, что метод 
приватный? Но почему тогда из метода test доступно this->foo(), ведь this указывает
нам на экземпляр текущего обьекта, а не класса? А объект у нас b.
Спасибо.
    


Ответы

Ответ 1



При наследовании - унаследуются метод test() и метод foo(), у каждого будет область видимости А, хоть и класс В, следовательно когда вы обращаетесь к методу test() в классе В - он может обратиться к foo() т.к. у них одна область видимости. Но в случае с классом С - у вас переобъявляется метод foo() а следовательно у него область видимости уже становится С и метод с областью видимости А не может к нему обращаться, так как это приватный метод. А значит чтоб вы могли использовать метод test() - его тоже нужно переопределить в классе С

Комментариев нет:

Отправить комментарий