【发布时间】:2020-02-10 06:43:59
【问题描述】:
我有主类,应该扩展 3 个特定类。
主要要求是:
-对于 OOP,我需要在相互扩展的有意义的类中演示代码结构,因此将是主要的抽象类 产品逻辑。一种方法是拥有一个产品基础 类,它将包含所有产品共有的所有逻辑,然后 特定的产品类型将扩展产品基类 特定类型的东西。
-想法是创建一个包含所有产品通用逻辑的抽象类,如getTitle、setTitle等。然后创建子产品类 为每种产品类型存储产品类型特定的逻辑,例如 家具尺寸、CD 尺寸、书重等。
我已经用 php traits 解决了这个任务:
Main.php
class Main
{
use Book;
use Disc;
use Furniture;
// common properties and methods
}
Disc.php
trait Disc
{
public function setSize($size)
{
$this->size = $size;
}
}
Book.php
trait Book
{
public function setWeight($weight)
{
$this->weight = $weight;
}
}
Furniture.php
trait Furniture
{
public function setHeight($height)
{
$this->height = $height;
}
public function setWidth($width)
{
$this->width = $width;
}
public function setLength($length)
{
$this->length = $length;
}
}
我已经用这样的接口解决了这个问题:
Main.php
class Main
{
// common properties
}
Types.php
interface Weight
{
public function setWeight($weight);
}
interface Size
{
public function setSize($size);
}
interface Fdim extends Weight,Size
{
public function setHeight($height);
public function setWidth($width);
public function setLength($length);
}
class Furniture extends Main implements fdim
{
public function setWeight($weight)
{
$this->weight = $weight;
}
public function setSize($size)
{
$this->size = $size;
}
public function setHeight($height)
{
$this->height = $height;
}
public function setWidth($width)
{
$this->width = $width;
}
public function setLength($length)
{
$this->length = $length;
}
}
这是满足上述要求的接口的最佳解决方案吗?
哪个特性或接口更容易接受?你有什么推荐?
我有一个问题:对于上述要求的任务,是否有更好的解决方案?我也尝试过抽象类和接口,但在我看来,需求对特征更满意。你有什么推荐的?
【问题讨论】:
-
接口和特征将是要走的路。像 Java 这样的 PHP 只允许单继承,而 C++ 允许多继承但有问题。接口(和特征)可以帮助允许类似于多重继承的东西
-
在我看来,最好将接口命名为
HavingWeight,并且特征也更通用,例如WithWeight、WithSize,这样你就不需要在@中使用别名了987654330@ 声明。然后使用Furniture的抽象基类,Chair、Table 等将从其扩展。你在这里命名像具体类这样的特征,例如,Disc应该从抽象DataCarrier扩展,DataCarrier应该使用WithSize等。
标签: php class oop traits multiple-inheritance