2016-07-15 73 views
0

在几个不同的地方,我称之为:PHP有无对象返回不同的对象

$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

[返回在类的构造函数的值]的可能的复制(http://stackoverflow.com/questions/6849572/returning-a-value-in-constructor-function-of-a-class ) – imtheman

+0

你想要一个工厂 – felipsmartins

回答

0

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

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

构造函数没有返回值,所以通过说return $object你只是简单地结束了那里的控制流而没有做别的事,从来没有达到“执行几个函数和设置变量”。根据你的结构,你应该考虑使MakeCall继承自MakeCallOld,那么你可以简单地在MakeCall的构造函数中调用parent::__construct();