参考文档 http://php.net/manual/zh/language.oop5.abstract.php
特点:
a. 含有一个抽象方法的类 必须被声明为一个抽象类
b. 抽象类不可以被实例化
c. 抽象方法不涉及具体的操作,只是定义了参数的
d.子类必须继成所有的抽象方法,且访问控制必须一致或者更加的宽松 (public protected private 这是类的属性)
e. 子类是单个继承的 接口(interface)是多个集成的
f. 属性不可以定义为 abstract
g. 可以定义常量 const name='name'
eg:
abstract class AbstractClass
{
// 强制要求子类定义这些方法
abstract protected function getValue();
abstract protected function prefixValue($prefix);
const name='name'
// 普通方法(非抽象方法)
public function printOut() {
print $this->getValue() . "\n";
}
}
class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return "ConcreteClass1";
}
public function prefixValue($prefix,$name=null) {
return "{$prefix}ConcreteClass1".PHP_EOL.'另外添加了一个形参'.$name;
}
}
$class1 = new ConcreteClass1();
echo $class1->prefixValue('carson___','liusen');
echo "PHP_EOL";
$class1->printOut();
echo "PHP_EOL";
输出结果:
carson___ConcreteClass1
另外添加了一个形参liusenPHP_EOLConcreteClass1
如果 ConcreteClass1的 prefixValue 的参数$name 改成了必须参数会报错的