PHP中的abstract关键字的用法和作用
更新时间:2023-07-161. abstract关键字的基本用法
在PHP中,abstract关键字用于指示一个类或者其中的一个方法是抽象的。如果一个类被定义为抽象的,那么它不能被实例化,只能被其他类继承。抽象类中可以定义抽象方法,这些方法没有实现代码,必须在子类中实现。
abstract class Animal { protected $name; public function __construct($name) { $this->name = $name; } abstract public function makeSound(); } class Dog extends Animal { public function makeSound() { echo "汪汪汪!"; } } $dog = new Dog("小白"); $dog->makeSound(); // output: 汪汪汪!
2. 抽象方法的规定
抽象方法没有具体的实现代码,必须在子类中实现。使用abstract关键字标记抽象方法,不能在普通类中定义抽象方法。一个类如果至少拥有一个抽象方法,那么这个类必须也是抽象类。当子类继承一个抽象类时,必须实现父类中所有的抽象方法,或者把子类也定义为抽象类。
abstract class Animal { protected $name; public function __construct($name) { $this->name = $name; } abstract public function makeSound(); } class Dog extends Animal { public function makeSound() { echo "汪汪汪!"; } } class Cat extends Animal { public function makeSound() { echo "喵喵喵!"; } } $animals = array(new Dog("小白"), new Cat("小黑")); foreach ($animals as $animal) { $animal->makeSound(); // output: 汪汪汪!喵喵喵! }
3. 抽象类的继承和重载
抽象类可以被继承,子类可以拥有父类的属性和方法,也可以在子类中重载或扩展父类的方法。如果子类不完全实现父类中的抽象方法,那么这个子类也必须是抽象类。
abstract class Animal { protected $name; public function __construct($name) { $this->name = $name; } abstract public function makeSound(); } abstract class Bird extends Animal { abstract public function fly(); } class Dove extends Bird { public function makeSound() { echo "咕咕咕!"; } public function fly() { echo "羽翼翱翔!"; } } $dove = new Dove("小白鸽"); $dove->makeSound(); // output: 咕咕咕! $dove->fly(); // output: 羽翼翱翔!
4. 抽象类的注意事项
在使用抽象类时,有以下几个注意事项:
- 抽象类不能被实例化。
- 抽象类中可以包含普通方法,但是子类不需要实现这些普通方法。
- 抽象方法不能为空,在子类中必须实现抽象方法。
- 一个类如果继承了一个抽象类,必须实现抽象类中所有的抽象方法或者把自己也定义为抽象类。
- 抽象类中定义的属性和方法可以有各种可见性修饰符(public、protected、private),但是抽象方法不能有方法体和方法定义。