2012-05-10 80 views
0

如何通過構造函數中的返回值來初始化類的基類?比方說,我有這樣的作爲基類:如何從靜態方法的返回對象初始化派生類?

class Base 
{ 
    public function Foo() 
    { 
    } 

    private $_var; 
}

我也有從另一個類,它返回基類這一個靜態方法:

class MyStaticClass 
{ 
    public static function Get() 
    { 
     return new Base(); 
    } 
} 

,現在我在這裏的基類它派生:

class Derived extends Base 
{ 
    public function __construct() 
    { 
     // Here, how can I initialize Base class with 
     // object MyStaticClass returns? Something like 

     parent = MyStaticClass::Get(); // This doesn't obviously work.. 
    } 
} 

有沒有解決方法/解決方法呢?

+1

如果你有這個需要......看來你需要重新考慮你的建築設計。爲什麼你想在它被宣佈爲擴展另一個類之後改變它的構建過程中的父類?你能舉一些上下文的例子嗎? – bmartins

回答

0

雖然它看起來像這樣做的一種罕見的方式,你大概的意思是這樣的:

class Derived extends Base 
{ 
    public function __construct() 
    { 
     parent::__construct(MyStaticClass::Get()); 
    } 
} 
+0

但是基類沒有構造函數。這是否仍然有效? – nhaa123

+0

也許你應該定義'Base'的拷貝構造函數接受'Base'類型作爲參數 – yuvin

+0

每個類都有一個構造函數。如果'Base'只有默認構造函數(我認爲不是),那麼這將不起作用,因爲默認構造函數不接受任何參數。 'Base'的構造函數需要一個'Base'類型的參數。 – fivedigit