1、在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公用方法作为外部代艨位雅剖码访问它的接口。而哨匕沿逼抽象方法就是为了方便继承而引入的。本节中先来介绍一下抽象类和抽象方法的声明,然后再说明其用途。在声明抽象类之前,我们先了解一下什么是抽象方法。抽象方法就是没有方法体的方法,所谓没有方法体是指在方法声明时没有花括号及其中的内容,而是在声明方法时直接在方法名后加上分好结束。另外在声明抽象方法时,还要使用关键字abstract来修饰。声明抽象方法的格式如下所示:Abstract function fun1(); //不能有花括号,就更不能有方法体中的内容了Abstract function fun2(); //直接在方法名的括号后面加上分好结束,还要使用abstract修饰只要在声明类时有一个方法是抽象方法,那么这个类就是抽象类,抽象类也要使用abstrat关键字来修饰.在抽象类中可以有不是抽象的成员方法和成员属性,但访问权限不能使用private关键字修饰为私有的。下面例子在Person类中声明了两个抽象方法say()和eat(),则Person类就是一个抽象类,需要使用abstract标识,代码如下:<?php //声明一个抽象类,要使用abstract关键字标识Abstract class Person{ Protected $name; //声明一个存储人的名字的成员Protected $country; //声明一个存储人的国家的成员Function __construct($name=””,$country=”china”){ $this->name = $name; $this->country = $country;}//在抽象类中声明一个没有方法体的抽象方法,使用abstract关键字标识Abstract function say();//在抽象类中声明另一个没有方法体的抽象方法,使用abstract关键字标识Abstract function eat();//在抽象类中可以声明正常的非抽象的方法Function run(){ Echo “使用两条腿走路<br>”; //有方法体,输出一条语句}}在上例中声明了一个抽象类Person,在这个类中定义了两个成员属、一个构造方法和两个抽象方法,还有一个非抽象的方法。抽象类就像是一个”半成品”的类,在抽象类中有没有被实现的抽象方法,所以抽象类是不能被实例化的,即创建不了对象,也就不能直接使用它。既然抽象类是一个”半成品”的类,那么使用抽象类有什么作用呢?使用抽象类包含了继承关系,它是为它的子类定义公共接口,将它的操作交给子类去实现。就是将抽象类作为子类重载的模板使用,定义抽象类就相当于定义了一种规范,这种规范要求子类去遵守。当子类继承抽象类以后,就必须把抽象类中的抽象方法按照子类自己的需要去实现。子类必须把父类中的抽象方法全部都实现,否则子类中还存在抽象方法,所以还是抽象类,也不能实例化对象。在下例子中声明了两个子类,分别实现上例中声明的抽象类Person.<?php //声明一个类去继承抽象类personClass ChineseMan extends Person{ //将父类中的抽象方法覆盖,按自己的需求去实现Function say(){ Echo $this->name.”是”.$this->country.”人,讲汉语<br>”; //实现内容} //将父类中的抽象方法覆盖,按自己的需求去实现Function eat(){ Echo $this->name.”使用筷子吃饭<br>”; //实现内容}}//声明另一个类去继承抽象类PersonClass Americans extends Person{//将父类中的抽象方法覆盖,按自己的需求去实现Function say(){ Echo $this->name.”是”.$this->country.”人,讲英语<br>”; //实现内容} //将父类中的抽象方法覆盖,按自己的需求去实现Function eat(){ Echo $this->name.”使用刀子和叉子吃饭<br>”; //实现内容}}$chinaeseMan = new ChineseMan(“高老庄”,”中国”); //将第一个person的子类实例化对象$americans = new Americans(“alax”,”美国”); //将第二个person的子类实例化对象$chinaeseMan->say(); //通过第一个对象调用子类中已经实例父类中抽象方法的say()方法$chinaeseMan->eat(); //通过第一个对象调用子类中已经实例父类中抽象方法的eat()方法$ americans ->say(); //通过第二个对象调用子类中已经实例父类中抽象方法的say()方法$ americans ->eat(); //通过第二个对象调用子类中已经实例父类中抽象方法的eat()方法