php语言的抽象类和抽象方法

PHP / 86人浏览 / 0人评论

php抽象类就是使用关键字abstract修饰的类就成为了抽象类;抽象类不能被实例化,只能被继承;如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现。

php抽象类

php抽象类就是使用关键字abstract修饰的类就成为了抽象类;抽象类不能被实例化,只能被继承;如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现。

正确的抽象类

abstract class Demo{

}

其使用了关键字abstract修饰的Demo类就成为了抽象类。 抽象类Demo不能被实例化 抽象类错误使用如下

abstract class Demo{

}
new Demo;

直接报错

Fatal error: Cannot instantiate abstract class Demoin /demo.php on line 5

抽象类正确使用如下

抽象类只能被继承,类DemoOne继承抽象类Demo。

abstract class Demo{
        // TODO
}
class DemoOne extends Demo
{
    // TODO
}

new DemoOne; 抽象类主要用来规范一些类的共同特性,需要这些规范的类就继承这个抽象类。

例如

一些类有共同的特性a、b、c,那么这些特性在抽象类Demo中定义为抽象方法,这些类都继承Demo这个抽象类。继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法。

<?php
abstract class Demo{
    abstract function a();
    abstract function b();
    abstract function c($params);

    // 普通方法(非抽象方法)
    public function hello($params = []) {
        print $this->a();
        print $this->b();
        print $this->c($params);
    }
}
class DemoOne extends Demo
{
    public function a() {
    // TODO
    }
    public function b() {
    // TODO
    }
    public function c($params) {
        var_dump($params);
    }
}
class DemoTwo extends Demo
{
    public function a() {
    // TODO
    }
    public function b() {
    // TODO
    }
    public function c($params) {
        var_dump($params);
    }
}
$demo_one = new DemoOne;
$demo_one->hello(['name'=>'demoOne']);
$demo_two = new DemoTwo;
$demo_one->hello(['name'=>'demoTwo']);

DemoOne类和DemoTwo类有共同的特性a、b、c,所有用抽象类Demo来进行规范。

额外说明

抽象类Demo中可以定义非抽象方法hello。

例如会输出

array(1) {
  ["name"]=>
  string(7) "demoOne"
}
array(1) {
  ["name"]=>
  string(7) "demoTwo"
}

转载注明:

扩展查找

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我