PHP 有对象 Return 不同的对象

PHP Have Object Return Different Object

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

$model=NEW MakeCall($form);

我已经更新了 MakeCall class 几项更改,我想在给定日期后生效。我把原来的class改名为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...

这目前只是 returns class MakeCallOld 的一个空对象,但 运行 MakeCallOld 中的构造函数似乎没有,因为所有属性都是空的。我只想将 MakeCallOld 的整个对象放入 $model.

构造函数没有 return 值,所以说 return $object 你只是在那里结束控制流,什么都不做,永远不会到达 "perform several functions and set variables"。根据您的结构,您应该考虑让 MakeCall 继承自 MakeCallOld,然后您可以简单地在 MakeCall 的构造函数中调用 parent::__construct();

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

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();