php抽象类跟java、c++什么的就很相似了
php抽象类有以下几个特点:
1. 抽象类继承抽象类时,不能重写父类中的抽象方法
2. 非抽象类继承抽象类时,必须实现抽象类中的所有方法
3. 至少有一个抽象方法的类就是抽象类
下面我们用代码来简单演示一下
<?php
/**
* Person抽象类
*/
abstract class Person{
private $name='';
private $age=0;
/**
* Person constructor.
* @param $n
* @param $a
* 在php中,构造方法对大小写不敏感,person方法为Person类的构造方法
*/
public function person($n,$a){
$this->name=$n;
$this->age=$a;
}
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
/**
* 定义抽象方法
*/
abstract function country();
public function PrintAll(){
echo '姓名:'.$this->getName().'年龄:'.$this->getAge().'国籍:'.$this->country().'</br>';
}
}
class China extends Person {
/**
* 非抽象类继承抽象类必须要实例化所有的抽象方法
*/
function country(){
return '中国';
}
}
class USA extends Person {
/**
* 非抽象类继承抽象类必须要实例化所有的抽象方法
*/
function country(){
return '美国';
}
}
/**
* 进行实例化的时候,会自动调用父类的构造方法
* 用printAll()方法来打印所有信息
*/
$a=new China('hjj',20);
$a->PrintAll();
$b=new USA('jack',18);
$b->PrintAll();
?>
这里我用了country()来作为Person类中的抽象方法,用China和USA类来继承Person类
因此China和USA类都必须实现country()方法
而在对象初始化的时候,会自动调用父类Person的构造方法
以下是运行结果:
顺便说一下,如果一个抽象类B继承了另一个抽象类A,然后类C继承了类B,那么类C将要实现抽象类A、B的所有抽象方法:
abstrct class A{ abstract function testA(); }
abstrct class B extends A{ abstract function testB(); }
class C extends B{ function testA(){ } function testB(){ } }