在几个不同的地方我打电话:
$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
。
答案 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
。