php抽象类详解

小云云
小云云asal
2018-03-15 10:09:521917semak imbas

PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

注意:

  1. 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;

  2. 另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。

  3. 方法的调用方式必须匹配,即类型和所需参数数量必须一致。

例:

<?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抽象类特性实例详解

Atas ialah kandungan terperinci php抽象类详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn