<?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");