共享类别表与PHP OOP方法
我有以下数据库表,用于存储不同类型的类别(查找代码)。在这里,不同的类别共享同一个数据库表,并通过cattype列进行区分共享类别表与PHP OOP方法,php,design-patterns,mysqli,Php,Design Patterns,Mysqli,我有以下数据库表,用于存储不同类型的类别(查找代码)。在这里,不同的类别共享同一个数据库表,并通过cattype列进行区分 catid|catname|catvalue|cattype -----+-------+--------+------- 1 Adult 100 Age 2 Child 200 Age 3 Black 150 Hair 4 Blond 220 Hair 现在我将这个DB表映射到扩
catid|catname|catvalue|cattype
-----+-------+--------+-------
1 Adult 100 Age
2 Child 200 Age
3 Black 150 Hair
4 Blond 220 Hair
现在我将这个DB表映射到扩展基本DAO类数据库(提供DB连接等($DB))的基本DAO类:
每个特定类别都有自己的类别:
// Returns age categories from 'categoris' table
class AgeCategory extends Category
{
public function getAll()
{
return parent::getAll('Age');
}
public function getSomething() {};
}
// Returns hair categories from 'categoris' table
class HairCategory extends Category
{
public function getAll()
{
return parent::getAll('Hair');
}
public function getSomething() {};
}
这里的问题是,子类的函数getAll()返回Category类型的父对象数组。当我循环遍历所有子对象时,例如:
$AgeCategory=new $AgeCategory()
$AgeCategories=$AgeCategory->getAll();
foreach($AgeCategories as $AgeCategory)
{
$cat=$AgeCategory->getSomething() //IT DOES NOT WORK!!!
}
我无法调用getSomething()函数,因为它是子对象函数,因为$AgeCategory->getAll()返回的是Category而不是AgeCategory类型的年龄笼!如何避免这个问题?我想要回AgeCography类的数组
好的,一个解决方案是工厂模式,我将参数发送到父类,它将为我的数组实例化适当的类。这个问题有更好(更简单)的解决方案吗?可能是完全不同的方法。您可以使用装饰图案。当您有很多类别时,这是一种常见的方法。事实上,正如Phpdna所述,这是一种装饰模式。工厂模式是创造性的,不会应用,因为您需要在运行时返回类别的复合数据类型
$AgeCategory=new $AgeCategory()
$AgeCategories=$AgeCategory->getAll();
foreach($AgeCategories as $AgeCategory)
{
$cat=$AgeCategory->getSomething() //IT DOES NOT WORK!!!
}