我有一个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.`
我认为工厂方法将适用于当前情况,因为这个工厂将为您提供您要查找的对象
不过,您必须传递某种信息,让工厂决定应该返回哪个对象。
抽象工厂模式:
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]");
}
}
}
在这类工作中使用类似ORM的条令怎么样。它支持继承,因此您可以将其映射到数据库模式(这应该是Doctrine中的具体继承类策略)。
否则,试着在这里澄清你的目标和具体问题是什么。