2016-07-15 22 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();