2016-05-11 11 views
1

はあなたが親クラスを拡張し、いくつかの子供を持つそして、親クラスPHPベストプラクティス:拡張親機能

class Parent { 

function doSomething() { 

    $this->operationA(); 

    $this->operationB(); 

    } 
} 

があるとします。

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

    } 
} 

同様のワークフローを設計するベストプラクティスは何ですか?

私はコードの繰り返しを避けたいです(operationAとoperationBはすべての子にあります)。同時に、すべての子が必要とするため、このメソッド(Parent-> doSomething()のみを残して、子メソッドを削除)を拡張できません。いくつかのカスタム操作を実行します。

どうすればこのコードをきれいにできますか?

ありがとうございます。

+0

質問をもっと細かく分解することができれば、すでにあるよりも多くの回答が得られるかもしれません。 **ちょっと考え** – cookies

+0

私がやることは、operationAとoperationBを父の上で保護されたものとして定義し、その後、息子から呼び出す必要があるときにparent :: operationA();を使用することです。 –

答えて

1

parent::修飾子を使用して、親のメソッドを呼び出します。

class ChildOne extends Parent { 

function doSomething() { 

    $this->myOperationC(); 

    parent::doSomething(); 

    $this->myOperationD(); 

    } 
} 
+0

operationAとoperationBは常に連続していますか? –

+0

親を拡張したい場合、親の操作の順序を変更すべきではありません。 – Barmar

+0

はい...私はよく分かりませんでした。むしろ、説明に「抜け穴」があります(例は連続していますが、明示的に言及していません)。しかし、これらの2つの機能を使用したい場合は、それらを分離して呼び出してください:parent :: operationA(); $ this-> operationC(); parent :: operationB();そして、(多分)親として保護されていると定義することができます。 –