PHP有对象返回不同的对象

时间:2016-07-15 23:40:51

标签: php oop reference instance

在几个不同的地方我打电话:

$model=NEW MakeCall($form);

我已经更新了MakeCall类,其中包含了一些我希望在给定日期之后生效的更改。我重命名了原始课程MakeCallOld

如何拨打电话:

$model=NEW MakeCall($form);

完整且在MakeCall内执行此操作:

class MakeCall
{ ...

    public function __construct($form)
    {
        //Use Legacy MakeCallOld for stuff before 2016-10-01
        if ($form['date']<'2016-10-01') {
            $object=NEW MakeCallOld($form);
            return $object;
        }

        $this->perform several functions and set variables...

这当前只返回类MakeCallOld的空对象,但它似乎没有在MakeCallOld中运行构造函数,因为所有属性都是空的。我只想将MakeCallOld的整个对象放入$model

2 个答案:

答案 0 :(得分:2)

您需要的是静态工厂构造函数。这是您应该根据参数添加初始化逻辑或切换构造函数的方式。

class MakeCall
{

    public function __construct($form)
    {
        $this->form = $form;
    }

    public function showForm(){
        echo $this->form;
    }


    public static function create($form){
        //put logic for picking object or whatever here!
        $object = new MakeCall($form);
        //Do more initializing if you want here!
        return $object;

    }
}

$form = "asdasd";
$model= MakeCall::create($form);
$model->showForm();

答案 1 :(得分:0)

构造函数没有返回值,因此通过说return $object,您只是在那里结束控制流而不执行任何其他操作,从不到达&#34;执行多个函数并设置变量&#34; 。根据您的结构,您应该考虑从MakeCall继承MakeCallOld,然后您只需在parent::__construct();的构造函数中调用MakeCall