インタフェースとあわせての実質的な多重継承の実現
trait は型を伴わない実装
interface は実装を伴わない型
2 つあわせて(だいたい)多重継承
// 単一継承だとこういうのを小分けにできない
// traitなら小分けに分割できる
class P {
public function common_function(): void {}
// A、Bにのみ必要な機能がC、Dにも導入
public function ab_function(): void {}
// C、Dにのみ必要な機能がA、Bにも導入
public function cd_function(): void {}
}
class A extends P {}
class B extends P {}
class C extends P {}
class D extends P {}