PHP也支援抽象类的和抽象方法,被定义为抽象类的方法不能被实体化,在任何一个类别中,
如果他至少有一个方法被声明为抽象,那这个类必须要被声明为抽象类。被定义为抽象类的方法只能声明他该怎麽使用,不能定义具体功能实现。
当有类别继承抽象类别时,子类别必须要定义父类别中的所以抽象方法,另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法是被声明为受保护的,那麽子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。
这也适用於 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的。
<?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_') ."\n";
?>
// outputs
// ConcreteClass1
// FOO_ConcreteClass1
// ConcreteClass2
// FOO_ConcreteClass2
<?php
abstract class AbstractClass
{
// 我们的抽象方法仅需要定义需要的参数
abstract protected function prefixName($name);
}
class ConcreteClass extends AbstractClass
{
// 子类的方法可以定义父类方法中不存在的可选参数,不冲突
public function prefixName($name, $separator = ".") {
if ($name == "Pacman") {
$prefix = "Mr";
} elseif ($name == "Pacwoman") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$prefix}{$separator} {$name}";
}
}
$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>
// outputs
// Mr. Pacman
// Mrs. Pacwoman
资料来源: https://www.php.net/
>>: Consistency and Consensus (3-3) - Total Order Broadcast
统计在现代社会中是不可或缺的,而更重要的是经过统计後的分析。不论在各行各业皆需要专业且精密的统计分析...
前言 今天是铁人赛的第十四天,这次要来写一下虚拟货币的爬虫 对象是meme虚拟货币界的霸主:狗狗币 ...
iOS工程师面试深入浅出(OC)- @property 使用方法?Copy 什麽时候用? 如果本来是...
形式神经元变形 (原文网址:https://kknews.cc/tech/z34j3rg.html)...
接着我将赶在记忆模糊之前来讲述第18周 也就是制作专题的第3周 谢天谢地在本周,各组後端除了部署完成...