2012-04-13 102 views
1

我試圖得到一個與PHP使用OOP的句柄,我有點難以忍受一些類繼承的東西。設置PHP類變量

這裏有幾個簡單的課程,我正在使用它來嘗試學習這些工作的方式。我想簡單地在一個子類的調用(父)類中設置一個變量。從我讀過的例子看來,這似乎應該工作,但子類無法設置父變量:

class test { 
    private $myvar; 
    private $temp; 

    function __construct(){ 
     $this->myvar = 'yo!'; 
     $temp = new test2(); 
     $temp->tester(); 
     echo $this->myvar; 
    } 

    public function setVar($in){ 
     $this->myvar = $in; 
    } 

} 

class test2 extends test{ 
    function __construct(){ 

    } 

    public function tester(){ 
     parent::setVar('yoyo!'); 
    } 

} 


$inst = new test(); // expecting 'yoyo!' but returning 'yo!' 

感謝您的任何幫助。

+3

它看起來像你很遺憾與繼承和麪向對象。這根本不是它的工作原理。 – NullUserException 2012-04-13 17:25:29

+0

非常輕描淡寫。我試圖想出一個關於julio代碼的比喻來讓他明白自己出錯的地方。正在進行中...... – 2012-04-13 17:31:09

回答

6

它看起來像你很遺憾與繼承和麪向對象。這根本不是它的工作原理。

我想簡單地設置一個變量在調用(父)類從一個子類。

這是不可能的,原因有幾個。

首先,當您使用new時,它會創建一個新的實例該類。每個實例彼此獨立,因爲它們的屬性不會被捆綁在一起。

此外,當你有一個子類時,繼承屬性和父類的方法。但是當你創建它的一個實例時,它是一個子類的實例 - 而不是父類。我不是你想在那裏完成的。

parent::setVar('yoyo!');

關於繼承的好處是,你在默認情況下得到了父母的方法,除非你在子類覆蓋它們。既然你沒有這樣做,就沒有必要使用parent::setVar(),只是做$this->setvar()

+0

@NullUserException--感謝您抽出時間作出明確的答覆。我想我明白。然而,如果'test2'類沒有擴展'test'類,但仍然在'test'中實例化 - 如何從'test2'中訪問/修改'test'類'變量?這可能嗎? – julio 2012-04-13 17:35:47

+0

@julio這是可能的 - 你需要'test2'實例來引用回到實例化它的'test'實例。 – NullUserException 2012-04-13 17:37:58

5

那麼,與

$temp = new test2(); 

要創建該類的一個新實例。他們不再相關了。

繼承隻影響類層次結構的單個實例。