2014-04-03 33 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