Php 构造类的未初始化对象

Php 构造类的未初始化对象,php,class,constructor,Php,Class,Constructor,我的一个类需要提供两种构造实例的方法:常规方法(即使用构造函数)和工厂静态方法。问题是,要在工厂方法中构造一个对象,我需要向构造函数提供一些参数,这将导致不必要的计算,因为这些计算的结果将最终成为对象的属性(即对象变量)但是工厂方法知道这些属性应该预先设置为什么值,并且可以在对象构造之后立即完美地设置它们 class AClass { public function __construct ($param1, $param2) { // some computat

我的一个类需要提供两种构造实例的方法:常规方法(即使用构造函数)和工厂静态方法。问题是,要在工厂方法中构造一个对象,我需要向构造函数提供一些参数,这将导致不必要的计算,因为这些计算的结果将最终成为对象的属性(即对象变量)但是工厂方法知道这些属性应该预先设置为什么值,并且可以在对象构造之后立即完美地设置它们

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;
}

是否有一种方法可以构造一个“空白”对象,然后“手动”设置其属性?

我不确定您到底在寻找什么,但也许您可以这样定义默认参数:

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')
{
     ....
}

仅根据其在类上下文中的含义,构造函数参数不能具有默认值。。