PHP中的abstract抽象类(附带实例)
抽象类是一种特殊的类,用于定义某种行为,具体的实现需要子类完成。
例如,完成跑步有多种方式,如基础跑、长距离跑、减速跑等。此时,可以定义跑步类为抽象类,将基础跑这些实现方式定义为抽象方法。
PHP 中,使用 abstract 关键字定义抽象类和抽象方法,基本语法格式如下:
为了让读者更好地理解抽象类和抽象方法,下面演示抽象类和抽象方法的使用,具体代码如下:
通过上述代码可以看出,实现抽象方法时,需要保证实现方法和抽象方法的访问权限一致,或实现方法的访问权限比抽象方法的访问权限更加开放。
例如,完成跑步有多种方式,如基础跑、长距离跑、减速跑等。此时,可以定义跑步类为抽象类,将基础跑这些实现方式定义为抽象方法。
PHP 中,使用 abstract 关键字定义抽象类和抽象方法,基本语法格式如下:
abstract class 类名 // 定义抽象类 { abstract public function 方法名(); // 定义抽象方法 }从上述语法可以看出,抽象类和抽象方法的定义都很简单。在使用 abstract 修饰类或方法时还应注意以下6点:
- 抽象方法是特殊的方法,只有方法定义,没有方法体;
- 含有抽象方法的类必须被定义成抽象类;
- 抽象类中可以有非抽象方法、属性和常量;
- 抽象类不能被实例化,只能被继承;
- 子类实现抽象类中的抽象方法时,访问控制修饰符必须与抽象类中的一致或者更宽松;
- 子类继承抽象类时必须实现抽象方法,否则也必须定义成抽象类,由下一个继承类来实现。
为了让读者更好地理解抽象类和抽象方法,下面演示抽象类和抽象方法的使用,具体代码如下:
abstruct class Human { abstruct protected function eat(); } abstruct class Man extends Human {} class Boy extends Man { public function eat() { echo 'eat'; } }上述代码中:
- 第 1~4 行代码定义 Human 抽象类,抽象类中定义了抽象方法 eat(),该方法的访问控制修饰符是 protected;
- 第 5 行代码定义了 Man 抽象类继承 Human 抽象类,由于该类没有实现抽象方法,因此 Man 类也必须定义成抽象类;
- 第 6~12 行代码定义了 Boy 类继承 Man 类;
- 第 8~11 行代码实现抽象方法 eat() 的具体功能,eat() 方法的访问控制修饰符是 public。
通过上述代码可以看出,实现抽象方法时,需要保证实现方法和抽象方法的访问权限一致,或实现方法的访问权限比抽象方法的访问权限更加开放。