我有一个存储人员和公司的MySQL表。他们有相同的领域。在php我有
class User{
var $_id;
var $_data;
function loadDataFromDb()
{
}
}
class Company extends User
{
function getName()
{
//some implemantation
}
}
class People extends User
{
function getName()
{
//some implemantation
}
}
创建对象的最佳方法是什么。当我创建我的对象时,我不知道哪种类型的客户端。
我需要类似的东西:
$user = /* code missing */
$user->getName(); // this will trigger the appropiate method.`
答案 0 :(得分:1)
我认为工厂方法适用于本案例,因为该工厂会为您提供您正在寻找的对象 您必须传递某种信息才能让工厂决定应该返回哪个对象。
答案 1 :(得分:1)
抽象工厂模式:
interface AbstractUserFactory{
public function buildUser($type);
}
class UserFactory implements AbstractUserFactory {
public function buildUser($type='user'){
if($type == 'user'){
return new User();
} else if ($type == 'company') {
return new Company();
} else if($type == 'people' ) {
return new People();
} else{
throw new Exception("Unknown User type [$type]");
}
}
}
答案 2 :(得分:0)
你如何使用像Doctrine这样的ORM进行这类工作。它支持继承,因此您可以将其映射到数据库模式(这应该是Doctrine中的具体继承类策略)。
否则,请尝试澄清你的目标和具体问题。