2014-04-03 70 views
0

我的一個類需要提供兩種構造實例的方法:常規方式,即使用構造函數和工廠靜態方法。問題在於,在工廠方法中構造一個對象時,我需要向構造函數提供一些參數,這會導致不必要的計算,因爲這些計算的結果會以對象的屬性(即對象變量)結束,但是工廠方法知道這些屬性應該事先設置的值,並且可以在對象構建完成後立即完成設置。構造一個類的未初始化對象

class AClass 
{ 
    public function __construct ($param1, $param2) 
    { 
     // some computations ending up in $this->_prop etc. 
    } 

    public static function factory() 
    { 
     $obj = new self(); // no way 
     $obj->_prop = "predefined value"; 
    } 

    protected $_prop; 
} 

莫不是構建一個「空白」對象的方式,然後在「手動」設置其屬性?

回答

0

我不知道你在尋找什麼,但也許你可以定義像這樣的默認參數:

public function __construct ($param1=null, $param2=null) 
{ 
    if ($param1 === null){ 
     // probably called by factory, 
     // so we don't have to do anything because they will be set 
     return; 
    }else{ 
     //some computations ending up in $this->_prop etc. 
    }  
} 

那麼你應該能夠調用構造函數不帶任何參數。

根據預定義的值是否始終是你可以做這樣的事情是相同的:僅僅通過其在類的上下文中的含義

public function __construct ($param1=DEFINED_VAL1, $param2='some default') 
{ 
    .... 
} 
+0

,構造函數的參數不能被允許有默認值.. –

+0

不甚至_null_? – Loopo