我现在正在使用PHP,尝试自己做一个练习来学习,但目前遇到了问题。
我的设计是这样的:1个类别将包含0到多个子类别,1个子类别将包含0到多个产品,在我的情况下,每个产品只属于1个子类别 。在我看来,它们是组合关系(如有错误,请指正),但之后我不知道如何编写这种关系的代码。在我看来,它应该是 3 个类(Category,SubCategory,Product),有自己的属性和方法。但可能是因为我的心思还停留在我的设计页面上。我将创建一个用于添加新类别及其子类别的页面(当然它还会有另一个用于编辑和更新的页面)。并创建一个用于添加新产品的页面。
如果我这样写Category和SubCatgory的代码,那么Product类呢?我所困扰的是,如果我像这样编写类Product,但我已经将属性[product]放在类SubCategory中,这不是一个错误的逻辑吗?谁能告诉我设计这种关系的正确逻辑?我知道对于很多前辈来说这可能是一个愚蠢的问题,但它确实困扰了我一个月而没有正确的解决方案。
此外,对于如何设计良好的班级结构和关系,有什么建议或材料吗?我觉得这对我来说真的很难。
感谢您查看我的问题。
Class Category{
private $subCat;
public function createNewSubCat(){
$this->subCat[]=new SubCategory();
}
}
Class SubCategory{
private $product;
public function createNewProduct(){
$this->product[]=new Product();
}
}
Class Product{
private $cat;
private $subCat;
public function setCategory(Category $c){
$this->cat=$c;
}
public function setSubCat(SubCategory $subC){
$this->subCat=$subC;
}
}
您可以将 Category 和 SubCatgory 类合并为一个 Category 类。像这样:
class Category
{
private $parentCategory = NULL;
private $categoryLevel = 0;
private $categories = [];
private $products = [];
public function __construct($parentCategory = NULL)
{
if ($parentCategory) {
$this->parentCategory = $parentCategory;
$this->categoryLevel = $parentCategory->getCategoryLevel() + 1;
}
}
public function getCategoryLevel()
{
return $this->categoryLevel;
}
public function createNewCategory()
{
return $this->categories[] = new Category($this);
}
public function createNewProduct(){
return $this->products[] = new Product($this);
}
}
class Product
{
private $parentCategory;
public function __construct($parentCategory = NULL)
{
$this->parentCategory = $parentCategory;
}
}
请注意,为了简单起见,我编写了这个松散类型的代码,但我向类别类添加了“level”属性,因此您可以检查特定类别在树中的深度。
如您所见,没有理由有“SubCategory”类。这简化了您的代码,尤其是当您想要呈现类别时。
注意我如何使用构造函数连接子类别和产品。
您可以添加限制:当类别类具有子类别时,您不能添加产品,并且当它具有产品时,它不能有子类别。或者,您也可以允许这样做。