2016-11-18 1 views
0

Ich bin verwirrt, was der Unterschied oder der Leistungszuwachs zwischen diesen 2 Szenarien wäre. Warum sollte einer über den anderen gewählt werden?Unterschied zwischen diesen beiden OOP-Szenarien?

Übergeordnete Klasse:

class exampleB 
{ 
    public function __construct($arg1, $arg2) 
    { 
     // Do something with the arguments. 
    } 
} 

Child-Klasse A

class exampleA extends exampleB 
{ 
    public function make($arg1, $arg2) 
    { 
     parent::__construct($arg1, $arg2); 
    } 
} 

Ausführen des ersten Beispiel:

$exampleA = new exampleA(); 
$exampleA->make('arg1', 'arg2'); 

Das zweite Beispiel wäre:

Child-Klasse A

class exampleA extends exampleB 
{ 
    public static function make($arg1, $arg2) 
    { 
     return new static($arg1, $arg2); 
    } 
} 

das zweite Beispiel Laufen:

exampleA::make('arg1', 'arg2'); 

Könnte mir jemand sagen, die Vorteile und/oder Nachteile zwischen diesen beiden Szenarien? Der Grund, warum ich dieses Beispiel habe, weil ich den Konstruktor meiner Elternklasse nicht überschreiben möchte.

+2

Ich würde auch nicht verwenden, '$ exampleA = new exampleA ('arg1', 'arg2');' ist alles, was Sie als Konstrukteur müssen in 'exambleB' automatisch, solange Sie don genannt werden überschreibe es nicht. – jeroen

+0

Ich möchte den vorhandenen Konstruktor in meiner Elternklasse nicht überschreiben, deshalb habe ich diese Lösungen entwickelt. Sollte das hinzugefügt haben. –

Antwort

2

Sie sollten beides nicht tun und den Konstruktor verwenden, um das Objekt zu initialisieren. Das Objekt muss in einem gültigen Zustand nach der Konstruktion sein.

Der Grund, warum ich dieses Beispiel, weil ich den Konstruktor meiner Elternklasse nicht überschreiben will.

Dann einfach einfach nicht den Konstruktor in der Kindklasse definieren.

class Parent { 
    public function __construct() { 
     echo 'parent ctor called'; 
    } 
} 

class Child extends Parent {} 

new Child(); // echo's parent ctor called 
-1

Ich würde für das zweite Beispiel entscheiden. Make() verhält sich wie ein Konstruktor und sollte daher wie einer, d. H. Statisch, aufgerufen werden.

Im ersten Beispiel erstellen Sie zwei Objekte anstelle von einem. Dies kann Verwirrung stiften, wenn andere Entwickler Ihren Code lesen/verwalten.

Verwandte Themen