2016-07-15 9 views
0

In ein paar verschiedenen Orten, die ich nenne:PHP-Objekt zurückgeben Verschiedenes Objekt

$model=NEW MakeCall($form); 

ich die MakeCall Klasse mit mehreren Änderungen aktualisiert habe, die ich beeinflusse nach einem bestimmten Datum zu nehmen. Ich benannte die ursprüngliche Klasse MakeCallOld

Wie kann ich meine Anrufe zu verlassen:

$model=NEW MakeCall($form); 

intakt und innerhalb MakeCall dies tun:

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... 

Das derzeit nur ein leeres Objekt der Klasse MakeCallOld aber Scheint, den Konstruktor in MakeCallOld nicht auszuführen, da alle Eigenschaften leer sind. Ich möchte einfach das gesamte Objekt MakeCallOld in $model fallen lassen.

+0

Mögliche Duplikat [Wert in Konstruktorfunktion einer Klasse Return] (http://stackoverflow.com/questions/6849572/returning-a-value-in-constructor-function-of-a-class) – imtheman

+0

Sie wollen eine Fabrik – felipsmartins

Antwort

0

Was Sie brauchen, ist eine statische Fabrik Konstruktor. Auf diese Weise sollten Sie Initialisierungslogik hinzufügen oder Konstruktoren je nach Argument wechseln.

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

Konstruktoren haben keinen Rückgabewert, also indem Sie return $object sagen, beenden Sie einfach den Kontrollfluss dort und tun nichts anderes, erreichen nie "führen Sie mehrere Funktionen aus und setzen Sie Variablen". Abhängig von Ihrer Struktur sollten Sie in Betracht ziehen, MakeCall erben von MakeCallOld, dann können Sie parent::__construct(); in MakeCall Konstruktor anrufen.