我的一类需要提供两种构造实例的方法:常规方式,即使用构造函数,以及通过工厂静态方法。问题是要在工厂方法中构造一个对象,我需要为构造函数提供一些参数,这会导致不必要的计算,因为这些计算的结果最终会出现在对象的属性中(即对象变量),但是factory方法知道应该事先设置这些属性的值,并且可以在对象构造之后完美地设置它们。
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 :(得分: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')
{
....
}