2016-03-28 4 views
0

Представим пример - у нас есть три классавызова только родительский метод

class A { 

    protected function render() 
    { 
    echo 'class A'; 
    } 

    protected show_error() 
    { 
    $this->render(); 
    exit('error'); 
    } 

} 

class B extends A { 
    protected function render() 
    { 
    echo 'class B'; 
    parent::render(); 
    } 

} 


class C extends B { 
{ 
} 

Так я создаю код

c = new C(); 
c->show_error(); 

Выход будет

class B 
class A 
error 

Вопрос - почему «show_error "метод call" render "метод из класса B? Почему просто не называть только «рендер» из класса А?

Может ли кто-нибудь объяснить это? И можно ли это сделать «по-моему»?

Спасибо!

+0

Да, вы правы, потому что использование $ this-> делает это, поэтому использование «я» делает трюк! Спасибо – scion4581

ответ

0

Это является основным Oop

class A { 

    protected function render() 
    { 
    echo 'class A'; 
    } 

    public function show_error() 
    { 
    self::render(); // this is what you're after 
    exit('error'); 
    } 

} 

Причина, по которой звонит B::render() потому, что C расширяет B и B переопределяет render()

Кроме того, show_error() должны быть публичными. в противном случае вы получите сообщение об ошибке.

+0

Большое спасибо, просто вызов self :: render() был достаточно – scion4581

+0

Я работаю в режиме разработки и всех сообщений об ошибках, но ошибок нет :) – scion4581

Смежные вопросы