PHP使用抽象类

抽象类

  • 1.使用关键字: abstract

  • 2.类中只要有一个方法声明为abstract抽象方法,那么这个类就必须声明为抽象类

  • 3.抽象方法只允许有方法声明与参数列表,不允许有方法体;

  • 4.因为抽象方法的不确定性,所以抽象类禁止实例化,仅允许通过继承来实例化;

  • 5.继承抽象类的子类中,必须将抽象类中的所有抽象方法全部实现

  • 6.子类成员的访问限制级别必须等于或小于抽象类的约定,例如抽象类是protected,子类必须是

  • protected 或者 public 不允许是private

  • 7.子类方法参数必须与抽象类方法参数完全一致,但允许增加默认参数

  • 特别注意

    1. 尽管抽象类不能实例化,但仍然可以为它创建构造器,但必须声明为final
    1. 抽象类理论上说不应该拥有静态成员,部分编辑器会有E_STRICT2048提示,但仍然可以这样做
<?php
//普通抽象类
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . "\n";
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "受保护类型 ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "普通函数 ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1();
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2();
$class2->printOut();
echo $class2->prefixValue('FOO_', 'aaaa') ."\n";
//以下为静态属性和静态方法的情況
abstract class Person{
    //人的姓名
    protected static $name = 'aaa';

    abstract public static function eat();

}

class Man extends Person{
    protected static $name = 'Hello';

    public static function eat(){
        echo self::$name;
    }
}

Man::eat();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值