PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;
定义方法:
abstract class animal{
//类的成员
}
下面通过一个案件来演示抽象类和抽象方法:
abstract class animal{
abstract public function shout();
}
class dog extends animal{
//实现抽象方法
public function shout(){
echo "我会狗叫";
}
}
class cat extends animal{
public function shout(){
echo "我会猫叫";
}
}
$idog=new dog();
$icat=new cat();
$idog->shout();
$icat->shout();
1、抽象类不能被实例化。
2、抽象类可以没有抽象方法,但有抽象方法的抽象类才有意义,一旦类包含了抽象方法,则这个类必须声明为abstract 。
3、抽象类中可以有非抽象方法,成员属性和常量。
4、抽象方法不能有函数体,它只能存在于抽象类中。
5、如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法,除非它自己也声明为抽象类。
如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方法来定义,即接口,在定义接口时,需要使用interface关键字,
interface animal{
public function run();
public function spk();
}
由于接口中定义的方法都是抽象方法,没有具体的实现 ,需要通过类来实现接口,实现接口用implements关键字,以下是实际案例:
interface animal{
function run();
function spk();
}
class dog implements animal{
public function run(){
echo "狗在跑";
}
public function spk(){
echo "狗在叫";
}
}
class cat implements animal{
public function run(){
echo "猫在跑";
}
public function spk(){
echo "猫在叫";
}
}
$icat=new cat();
$idog=new dog();
$icat->run();
$idog->spk();