php中abstract的用法

<?php

// 1.声明抽象方法的必须声明为抽象类
//2.抽象类不能被实例化  new AbstractClass();会报错
//3.抽象方法不能定义具体功能实现,只是声明其调用方式,不能呢过定义其具体功能实现
abstract class AbstractClass{
    abstract protected function getValue();
    abstract protected function getPrefixValue($prefix);
    public function printOut()
    {
        print $this->getValue();
    }
}

//继承一个抽象类的时候,子类必须实现父类的抽象方法
//这些访问控制必须和父类一样或者更为宽松
//父类中的抽象方法必须和子类中实现方法的参数类型和数量一致(有待确认,可以加默认参数)
//例如,子类的实现的抽象方法中定义一个可选参数,而父类中声明没有,则两者并无冲突;父类抽象方法有,子类没有也可以
class ConcreteClass1 extends AbstractClass{
    protected function getValue($value="")
    {
        return "ConcreteClass1";
    }

    public function getPrefixValue($prefix)
    {
        // TODO: Implement getPrefixValue() method.
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass{
    protected function getValue()
    {
        // TODO: Implement getValue() method.
        return "ConcreteClass2";
    }

    public function getPrefixValue($prefix,$separator="")
    {
        // TODO: Implement getPrefixValue() method.
        return "{$prefix}ConcreteClass2".$separator;
    }
}


$class1 = new ConcreteClass1();
$class1->printOut();
echo $class1->getPrefixValue("FOO_");

$class2 = new ConcreteClass2();
$class2->printOut();
echo $class2->getPrefixValue("FOO_","ON");

上一篇:CF1149A - Prefix Sum Primes(贪心)


下一篇:解决springboot不能解析@ConfigurationProperties(prefix = “xxx“)