2011-12-01 121 views
0

對不起,對於措辭嚴重的標題。我不太瞭解面向對象的PHP,因此,我無法想出一個更好的標題(或解決我的問題!)。當第一個實例化而不使用構造函數時,是否有可能實例化第二個類?

好了,所以,我有這樣的事情:

Class foo{ 
    var $hello; 
    function foo(){ 
    } 
} 

Class customfoo extends foo{ 
    //No Constructor 
} 

現在,我寫了另一個類,姑且稱之爲customclass,我想在customfoo類使用它。但是,我不只是想在customfoo類中使用它,我希望在創建customfoo類後立即創建它。

通常情況下,我相信,你只需要使用這個構造函數,所以像:

Class customfoo extends foo{ 
    var $custom; 
    function customfoo(){ 
     $this->custom = new customclass(); 
    } 
} 

然而,customfoo是一個子類,所以,我認爲,構造函數替換父的構造上課,我不希望這種情況發生。那麼,當customfoo第一次啓動時,我該如何創建一個類customclass?我猜,我可以只寫一個任意函數並通過其他函數調用它(我確信它會在早期執行),但至少知道如何執行上述操作會很好。

+0

在PHP類的構造函數是'__construct ()'。使用與類的名稱相同的函數作爲構造函數將被折舊並且僅用於向後兼容性。你不應該再使用它。 – vascowhite

+0

@vascowhite是的,我不打算。我正在編寫的代碼已經是這樣寫的,所以我下意識地複製了它。 – zermy

+0

http://www.php.net/manual/en/keyword.parent.php這可能會有所幫助 – suenda

回答

3

首先,您應該將您的counstructors命名爲__construct

正如你所指出的那樣,你寫的構造函數將覆蓋父母的一個,但你總是可以從子類調用它,就像這樣:

Class customfoo extends foo{ 
    var $custom; 
    function __construct(){ 
     parent::__construct(); 
     $this->custom = new customclass(); 
    } 
} 
+0

糟糕,是的,你說的是'_construct'。代碼已經寫好了,所以我就這樣離開了。 至於你的解決方案,呵呵,這很有趣。那麼,嗯,父母是一個關鍵詞,還是我把父母的名字放在那裏? – zermy

+0

不,父母是一個保留關鍵字。你可以找到更多關於PHP手冊的信息:http://www.php.net/__construct – rabusmar

+0

@zermy它看起來像你應該閱讀這個http://us2.php.net/oop或一本好書/網站OOP與PHP。那裏有很多很好的教程。 – vascowhite

相關問題