2016-03-28 126 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 「從B類方法調用」渲染「方法? 爲什麼不從A類本身只調用「渲染」?

有人可以解釋一下嗎?並且有可能以「我的方式」來做到這一點嗎?

謝謝!

+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延伸BB重新實現render()

此外,show_error()應該是公開的。否則你會得到一個錯誤。

+0

非常感謝,只需調用self :: render()就足夠了 – scion4581

+0

我正在開發模式和所有錯誤消息上,但沒有錯誤:) – scion4581