Почему это работает?

Духовность™

Продвинутый новичок
Почему это работает?

PHP:
class Base
{
    function foo()
    {
        echo 'Вызов Parent::foo()';
    }
}

class Child1 extends Base
{
}

class Child2 extends Child1
{
    function foo()
    {
        parent::foo();
    }
}

$object = new Child2();
$object->foo();
Я всегда считал, что parent:: обращается к классу-родителю, но не к наивысшему классу-предку. Вассал моего вассала не мой вассал.

Это правильно???
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
предок твоего предка - твой предок

-~{}~ 10.02.10 15:07:

наследование != феодализм :)
 

.des.

Поставил пиво кому надо ;-)
parent:: обращается к классу родителю - Child1, но в нем foo унаследован от Base. Определи метод foo в Child1 и он скроет метод foo в Base.
что именно непонятно?.
 

Духовность™

Продвинутый новичок
Во как оказывается. Век живи, век учись. grigori пасибо.

-~{}~ 10.02.10 16:10:

что именно непонятно?.
все понятно, я просто думал всегда, что parent:: (от слова родитель) подразумевает обращение непосредственному предку, а не к пра-пра-дедушке. Ну и никогда до сегодняшнего дня не писал обращений к прадедушкам.
 

Beavis

Banned
triumvirat
Так он и обращается непосредственно к предку. просто непосредственно в предке этот метод уже считается определенным, т.к. унаследован от Base и область видимости не private
 

Adelf

Administrator
Команда форума
triumvirat
Мне вот интересно, а что должно было произойти по твоему мнению?
 

Adelf

Administrator
Команда форума
triumvirat
Выше ты ответил что обращение к непосредственному предку ожидал. А что по твоему должно было произойти в итоге? Fatal error?
Просто интересен ход твоих мыслей. Я сам над такими вещами даж не задумывался :)
 

Духовность™

Продвинутый новичок
Да не думал я над тем, что должно было в итоге произойти. Я сегодня в первый раз наткнулся на это.
 

Krishna

Продался Java
Да не думал я над тем, что должно было в итоге произойти. Я сегодня в первый раз наткнулся на это.
"Это" зовётся полиморфизмом и динамическим связыванием :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
"Он сдал на SCJP, а ты чего добился?"
(демотиватор)
 

pilot911

Новичок
то есть, если бы в class Child1 конструктор был объявлен как приватный, из класса Base конструктор бы не вызывался ?
 

zerkms

TDD infected
Команда форума
т.е. написать 5 строчек и попробовать самому - слишком сложно?
 

Adelf

Administrator
Команда форума
pilot911
А с чего это он вызываться то должен вдруг? Приватный!
 
Сверху