【问题标题】:Construct an uninitialized object of a class构造一个未初始化的类对象
【发布时间】:2014-04-03 19:49:48
【问题描述】:

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

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

有没有办法构造一个“空白”对象,然后“手动”设置其属性?

【问题讨论】:

    标签: php class constructor


    【解决方案1】:

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

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

    【讨论】:

    • 就其在类上下文中的含义而言,不能允许构造函数参数具有默认值..
    猜你喜欢
    • 1970-01-01
    • 2016-01-08
    • 2021-11-06
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多