PHP抽象类 介绍


PHP中的抽象类是一种不能被实例化的类,它主要用于定义接口或者为子类提供共享的方法实现。抽象类的主要目的是作为其他类的基类(父类),并强制要求子类实现(或覆盖)某些方法。这有助于实现代码的复用和标准化。

### 抽象类的特点

1. **抽象方法**:抽象类可以包含抽象方法,这些方法是只有声明而没有具体实现的。抽象方法以`abstract`关键字声明,并且不包含方法体(即没有大括号`{}`)。

2. **不能被实例化**:尝试实例化一个抽象类将会导致一个致命错误(Fatal Error)。

3. **子类实现**:如果子类继承了一个抽象类,它必须实现(覆盖)该抽象类中定义的所有抽象方法,除非子类本身也是抽象的。

4. **访问修饰符**:抽象方法默认为`public`,但也可以使用其他访问修饰符(如`protected`或`private`)进行定义。然而,如果抽象方法被声明为`private`或`protected`,则该类及其子类都不能被实例化,这实际上违背了抽象类的初衷。

### 示例代码


abstract class Animal {
    // 抽象方法
    abstract public function makeSound();

    // 非抽象方法
    public function move() {
        echo "This animal can move.\n";
    }
}

class Dog extends Animal {
    // 实现抽象方法
    public function makeSound() {
        echo "Woof!\n";
    }
}

// 使用
$dog = new Dog();
$dog->makeSound();  // 输出: Woof!
$dog->move();        // 输出: This animal can move.

// 尝试实例化抽象类将会失败
// $animal = new Animal(); // 这将引发致命错误

在这个例子中,`Animal`是一个抽象类,它定义了一个抽象方法`makeSound()`和一个非抽象方法`move()`。`Dog`类继承自`Animal`类,并实现了`makeSound()`方法。尝试实例化`Animal`类将会失败,因为它是一个抽象类。但是,可以成功实例化`Dog`类,因为`Dog`类提供了`Animal`类中所有抽象方法的实现。