如果父类太多,则会造成垂直方向继承过多,导致类的层级过深,从而难以维护,此时可以使用水平扩展代替垂直扩展。
    实例如下:

    1. interface Power
    2. {
    3. public function power();
    4. }
    5. class Gas implements Power
    6. {
    7. public function power()
    8. {
    9. return "汽油";
    10. }
    11. }
    12. class Battery implements Power
    13. {
    14. public function power()
    15. {
    16. return "电池";
    17. }
    18. }
    1. <?php
    2. interface CarContract
    3. {
    4. public function drive();
    5. }
    6. abstract class BaseCar implements CarContract
    7. {
    8. protected $brand;
    9. /**
    10. * @var Power
    11. */
    12. protected $power;
    13. public function __construct(Power $power, $brand)
    14. {
    15. $this->power = $power;
    16. $this->brand = $brand;
    17. }
    18. abstract public function drive();
    19. }
    20. class LynkCo01 extends BaseCar
    21. {
    22. public function __construct(Power $power)
    23. {
    24. parent::__construct($power, '领克01');
    25. }
    26. public function drive()
    27. {
    28. echo "启动{$this->brand}汽车" . PHP_EOL;
    29. echo "动力来源: " . $this->power->power() . PHP_EOL;
    30. }
    31. }