#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() - его тоже нужно переопределить в классе С
Комментариев нет:
Отправить комментарий