Key 类有一个非抽象方法 getDescription()(用于多种用途)。
关键类由“子抽象类”(之一)扩展。
“子抽象类”由“具体类”扩展。
我想强制“一个具体类”实现 getDescription() 方法,并尝试在“子抽象类”中将其重新声明为抽象方法,但失败了。
那么,是否可以在 php 中将非抽象方法重新声明为抽象方法? 如果不是 - 如何强制实现具体方法?
关键类。我需要以这种方式声明的 getDescription 出于多种目的。
abstract class beverage{
public $description = "Unknown beverage";
public function getDescription(){return $this->description;}
};
抽象类,重写 getDescription() - 但不起作用。
abstract class condimentDecorator extends beverage {
//public abstract function getDescription();
};
具体类,必须重新实现 getDescription。
class milk extends condimentDecorator{
public $beverage;
public function __construct(beverage $beverage){$this->beverage = $beverage;}
public function getDescription(){return $this->beverage->getDescription().", Milk";}
};
最佳答案
is it possible to redeclare non-abstract method as abstract in php?
不,您不能在 PHP 中执行此操作
您似乎正在尝试实现装饰器模式。
在这种情况下,提供的类链过于复杂。
装饰器模式致力于在不改变其结构的情况下向另一个类添加(扩展)功能。
以下是实现装饰器的经典且更优化的方法:
abstract class Beverage {
public $description = "Unknown beverage";
public function getDescription(){
return $this->description;
}
}
class CondimentDecorator extends Beverage {
protected $beverage;
public function __construct(Beverage $beverage) {
$this->beverage = $beverage;
}
public function getDescription() {
return "Description:\t" . $this->beverage->getDescription() . " with condiment";
}
};
class Milk extends Beverage {
public function __construct($desc = "") {
$this->description = $desc;
}
}
$milk = new Milk('Milk beverage');
$milk_with_condiment = new CondimentDecorator($milk);
echo $milk_with_condiment->getDescription();
输出:
Description: Milk beverage with condiment
关于PHP。是否可以将非抽象方法重新声明为抽象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41380570/