什么是继承?它在PHP中如何实现?

在面向对象的编程(OOP)中,继承是一种基本概念,它允许一个类(称为子类或派生类)继批另一个类(称为父类或基类)的属性和方法。通过继承,子类可以复用父类的功能,并可以扩展或修改这些功能,这有助于代码的复用和模块化。

在PHP中,继承是通过关键字 extends 来实现的。当一个类定义为继承另一个类时,子类自动获得父类的所有公共和保护的属性和方法。私有属性和方法则不会被继承,因为它们仅在定义它们的类中可见。

下面是PHP中实现继承的一个基本示例:

<?php
// 定义一个基类
class Vehicle {
    public $brand;
    public $color;

    public function __construct($brand, $color) {
        $this->brand = $brand;
        $this->color = $color;
    }

    public function start() {
        echo "Vehicle is starting\n";
    }
}

// 定义一个派生类
class Car extends Vehicle {
    public $doorCount;

    public function __construct($brand, $color, $doorCount) {
        parent::__construct($brand, $color); // 调用父类的构造函数
        $this->doorCount = $doorCount;
    }

    // 重写父类的方法
    public function start() {
        echo "Car is starting with $this->doorCount doors\n";
    }
}

// 创建Car的实例
$myCar = new Car("Toyota", "red", 4);
$myCar->start();  // 输出:Car is starting with 4 doors
?>

在这个例子中,Car 类继承了 Vehicle 类。Car 类通过使用 extends 关键字来声明它继承自 Vehicle 类。在 Car 类的构造函数中,它调用了父类的构造函数 parent::__construct($brand, $color); 来确保父类的属性被正确初始化。

此外,Car 类重写了 start 方法,这是继承中的一个重要特征,即方法重写(或方法覆盖)。方法重写允许子类改变继承来的行为。在上面的代码中,当调用 $myCar->start(); 时,实际调用的是 Car 类中定义的 start 方法,而不是 Vehicle 类中的方法。

继承的使用使得代码更加模块化和可重用,同时也支持多态性,这是面向对象编程中非常重要的一个特性。通过继承,可以建立一个层次结构的类系统,使得复杂系统更加易于管理和扩展。