2009-09-19 56 views
3

我一直在PHP中使用OOP一段時間,但由於某種原因,我的整個大腦崩潰並無法解決這裏出了什麼問題!將變量傳遞給擴展的PHP類

我有一個更復雜的類,而是寫了一個簡單的一個測試它,甚至這是不工作...

誰能告訴我什麼,我做錯了什麼?

class test 
{ 
    public $testvar; 

    function __construct() 
    { 
     $this->testvar = 1; 
    } 
} 

class test2 extends test 
{ 
    function __construct() 
    { 
     echo $this->testvar; 
    } 
} 

$test = new test; 
$test2 = new test2; 

我想要做的就是將一個變量從父類傳遞給子類!我發誓過去我剛用$ this-> varName得到$ varName的擴展名?

謝謝!

回答

15

您必須從子類的構造函數中調用父類的構造函數。

這意味着,你的情況,你的test2類將隨即成爲:

class test2 extends test 
{ 
    function __construct() 
    { 
     parent::__construct(); 
     echo $this->testvar; 
    } 
} 

欲瞭解更多信息,你可以看看說明書,其中規定,關於你的問題的Constructors and Destructors頁:

注:父構造函數不 隱式調用如果子類 定義構造函數。爲了運行 父構造函數,需要在 子構造函數中調用 parent::__construct()


您可以使用$this->varName:這是沒有問題的;考慮下面的代碼:

class test { 
    public $testvar = 2; 
    function __construct() { 
     $this->testvar = 1; 
    } 
} 
class test2 extends test { 
    function __construct() { 
     var_dump($this->testvar); 
    } 
} 
$test2 = new test2; 

輸出是:

int 2 

這是$testvar 「默認」 值。

這意味着問題不在於您無法訪問該屬性:此處的問題僅在於父類的構造函數未被調用。

+0

+1瞭解更多詳情。 :) – Amber 2009-09-19 21:20:24

+0

太棒了!這工作!謝謝! – Matt 2009-09-19 22:17:37

+0

@Matt:不客氣:-) ;; @Dav:謝謝! – 2009-09-19 22:20:19

2

test2類應該調用

parent::__construct() 
在其構造

+0

謝謝!我希望我可以將此添加爲接受的答案! – Matt 2009-09-19 22:18:19