Сразу код:
class CommonClass {
public function foo() {/*...*/}
public function bar() {/*...*/}
}
class ConcreteClass1 extends CommonClass {
public function doSomething1() {/*...*/}
public function doSomething2() {/*...*/}
}
class ConcreteClass2 {
public function doSomething1() {/* тот же код из ConcreteClass1 */}
public function doSomething2() {/* тот же код из ConcreteClass1 */}
public function doSomething3() {/*...*/}
}
В реализации ConcreteClass2 присутсвуют два метода, которые полностью дублируют код методов из ConcreteClass1. При этом наследоваться от ConcreteClass1 нельзя, потому в ConcreteClass2 методы foo() и bar() из CommonClass не должны быть.
Как можно избавиться от дублирования без множественного наследования и трейтов?