2016-05-11 10 views
1

Angenommen, Sie eine ElternklassePHP Best Practice: Erweiterung Geordnete Funktionen

class Parent { 

function doSomething() { 

    $this->operationA(); 

    $this->operationB(); 

    } 
} 

Dann haben Sie einige Kind haben, dass die übergeordnete Klasse erweitern.

class ChildOne extends Parent { 

function doSomething() { 

    $this->myOperationC(); 

    $this->operationA(); 

    $this->operationB(); 

    $this->myOperationD(); 

    } 
} 

class ChildTwo extends Parent { 

function doSomething() { 

    $this->myOperationE(); 

    $this->operationA(); 

    $this->operationB(); 

    $this->myOperationF(); 

    } 
} 

Was sind die besten Verfahren, um einen ähnlichen Workflow zu erstellen?

Ich möchte Code Wiederholungen vermeiden (operationA und operationB existiert in jedem Kind), aber zur gleichen Zeit kann ich nicht vollständig diese Methode erweitern (nur Eltern-> doSomething() und Kinder Methoden löschen), weil jedes Kind muss Führen Sie einen benutzerdefinierten Vorgang aus.

Wie würden Sie diesen Code sauber machen?

Vielen Dank.

+0

Wenn Sie Ihre Frage etwas weiter aufschlüsseln können, erhalten Sie möglicherweise mehr Antworten, als sie bereits haben. ** Nur ein Gedanke ** – cookies

+0

Was ich tun würde, ist die OperationA und OperationB als geschützt auf dem Vater zu definieren, und nach, wenn Sie sie von den Söhnen aufrufen müssen, verwenden Sie parent :: operationA(); –

Antwort

1

Verwenden Sie den Modifizierer parent::, um die Methode eines übergeordneten Elements aufzurufen.

class ChildOne extends Parent { 

function doSomething() { 

    $this->myOperationC(); 

    parent::doSomething(); 

    $this->myOperationD(); 

    } 
} 
+0

OperationA und OperationB sind immer aufeinander folgend ?? –

+0

Wenn er den Elternteil erweitern möchte, sollte er die Reihenfolge der Operationen des Elternteils nicht ändern. – Barmar

+0

ja ... ich habe es nicht gut verstanden, oder vielmehr, es gibt eine "Lücke" in der Erklärung (auf den Beispielen sind aufeinander folgende, aber es gibt keine explizite Erwähnung), aber wenn er diese beiden Funktionen nutzen will, kann er Rufen Sie sie isoliert auf: parent :: operationA(); $ this-> operationC(); Eltern :: operationB(); Und (vielleicht) kann als auf dem Elternteil geschützt definiert werden. –