抽象方法需用abstract修饰且无方法体,只能存在于抽象类中,子类必须重写;抽象类不能实例化,可包含抽象和具体方法,用于定义规范和实现多态。

在PHP中,抽象方法和抽象类是面向对象编程的重要组成部分,主要用于定义规范、实现多态以及构建可扩展的程序结构。下面详细介绍PHP中抽象方法的定义规则及抽象类的使用方式。
抽象方法的声明规则
抽象方法是在抽象类中声明但不实现的方法,子类必须重写这些方法。其声明需遵循以下规则:
- 抽象方法使用 abstract 关键字修饰
- 抽象方法不能包含方法体,即以分号结尾,不使用大括号
- 抽象方法只能出现在抽象类中,不能在普通类或接口中直接定义(注意:接口中的方法默认抽象)
- 抽象方法可以定义访问控制符,如 public 或 protected,但不能为 private
- 子类继承抽象类时,必须实现所有抽象方法,否则该子类也必须声明为抽象类
abstract class Animal {
// 抽象方法,无方法体
abstract public function makeSound();
// 普通方法,可有实现
public function sleep() {
echo "The animal is sleeping.";
}
}
抽象类的定义与使用
抽象类是不能被实例化的类,用于作为其他类的基类,提供统一的接口和部分实现。
- 使用 abstract 关键字修饰类名来定义抽象类
- 抽象类可以包含抽象方法和具体方法(已实现的方法)
- 不能通过 new 实例化抽象类
- 子类通过 extends 继承抽象类,并实现其所有抽象方法
- 抽象类可以有构造函数,子类继承时可调用父类构造函数
class Dog extends Animal {
public function makeSound() {
echo "Woof! Woof!";
}
}
// 使用
$dog = new Dog();
$dog->makeSound(); // 输出: Woof! Woof!
$dog->sleep(); // 输出: The animal is sleeping.
注意事项与最佳实践
在使用抽象类和抽象方法时,应注意以下几点:
立即学习“PHP免费学习笔记(深入)”;
- 抽象方法必须在子类中完全实现,方法名、参数数量和类型需保持一致(PHP 7.4+ 支持类型声明)
- 抽象类适合用于具有共同行为基础,但具体实现不同的场景,如不同支付方式、数据导出格式等
- 若类中有一个抽象方法,该类必须声明为抽象类
- 抽象类可包含属性、常量、静态方法等常规类成员











