注意:
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;
另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。
方法的调用方式必须匹配,即类型和所需参数数量必须一致。
例:
<?phpabstract class abstractclass{ // 我们的抽象方法仅需要定义需要的参数 abstract protected function prefixname($name);}class concreteclass extends abstractclass{ // 我们的子类可以定义父类签名中不存在的可选参数 // 该访问控制只能是公有的(public)或受保护(protected)的 public function prefixname($name, $separator = ".") { if ($name == "pacman") { $prefix = "mr"; } elseif ($name == "pacwoman") { $prefix = "mrs"; } else { $prefix = ""; } return "{$prefix}{$separator} {$name}"; } }$class = new concreteclass;echo $class->prefixname("pacman"), "\n";echo $class->prefixname("pacwoman"), "\n";?>
结果:
mr. pacman mrs. pacwoman
分析:
虽然子类定义了一个可选参数,而父类抽象方法的声明里没有,但和注意中的第三点并无冲突
相关推荐:
php抽象类的实现方法详解
php抽象类、接口的区别和选择实例详解
php抽象类特性实例详解
以上就是php抽象类详解的详细内容。
