创建一个抽象(abstract)类,换句话说,就是不能直接实例化的类,不过可以作为子类的一个公共基类。
将类标志为abstract:
abstract class Database{}
必须至少在这个类中定义一个抽象方法。可以在方法定义前面加上abstract关键字:
abstract class Database {
abstract public function connect();
abstract public function query();
abstract public function fetch();
abstract public function close();
抽象类必须至少包含一个同样标志为abstract的方法。这些方法称为抽象方法(abstractmethods)。Database包含4个抽象方法:connect(),query(),fetch()和close()。
如果一个类包含一个抽象方法,这个类也必须声明为抽象。不过,抽象类可以包含非抽象方法(尽管Database中没有非抽象的常规方法)。
与接口中所列的方法类似,抽象方法并不在抽象类中实现。实际上,抽象方法要在扩展这个抽象父类的子类中实现。
实现抽象方法时,必须保持相同的方法原型。如果子类未能实现父类中的全部抽象方法,那么它本身也是一个抽象类,必须有另一个类进一步派生这个子类。如果希望创建两个MySQL类,可以让一个类按对象获取信息,另一个类返回数组。
对于抽象方法有两个要求:
抽象方法不能定义为private,因为需要由子类继承这些方法。
抽象方法不能定义为fnal,因为需要在子类中覆盖这些方法。
抽象类和接口是两个相似的概念,不过不完全相同。一方面,可以实现多个接口,不过只能扩展一个抽象类。
另外,在接口中只能定义方法原型,而不能实现方法。与之不同,抽象类只要求一个抽象方法是抽象的,另外可以有多个非抽象方法,甚至可以有属性。