2016-03-01 73 views
-1

我學習PHP類和對象,但這些代碼混淆了我:爲什麼是php程序的輸出?

<?php 
class A 
{ 
    public function test() 
    { 
     //output will be A load(), why? 
     self::load(); 
     //output will be B load(), why? 
     $this->load(); 
    } 
    public function load() 
    { 
     echo "A load()"; 
    } 
} 

class B extends A 
{ 
    public function test() 
    { 
     parent::test(); 
    } 
    public function load() 
    { 
     echo "B load()"; 
    } 
} 
$c = new B(); 
$c->test(); 

在這些情況下,爲什麼self::load()$this->load()得到不同的輸出?

請詳細描述。

+0

的可能的複製[何時使用自超過$嗎?(HTTP:/ /stackoverflow.com/questions/151969/when-to-use-self-over-this) – mitkosoft

+0

因爲'self :: load()'引用了__class的'load()'方法,其中方法在繼承中被調用___樹;而'$ this-> load()'引用__instance__的load方法,並且通過繼承'''''load''方法覆蓋實例的'''load()'方法 –

回答

0

讓我們開始吧。

Self選擇當前班級。

this選擇當前對象。

所以當你使用self::load();它,當你使用$this->load();意思加載功能在A級

在另一方面class B->load

相關問題