我为我的问题选择了正确的设计模式让我感到有些困惑。这是我的代码:
<?php
class Report_Journal ...
class Report_Recommendation ...
class Report_Customer ...
$type = "journal"; // value can also be "recommendation or customer"
?>
现在我想为该特定类型创建正确的对象,在这种情况下意味着Report_Journal。我在考虑工厂模式,但我不喜欢工厂的是它的依赖关系,它们没有注入,而是在类中定义。你会如何解决这个问题?提前谢谢。
BR, 克里斯
答案 0 :(得分:1)
工厂模式是从我的角度来看正确的方法。您应该首先创建一个interface
来定义所有这些类型的公共接口,并使用它来放入使用该类的所有这些方法的参数列表。
function blub(myInterface $obj)
是依赖注入明确需要的,假设blub
方法用于注入所需的类。由于您的所有三个对象都继承自myInterface
,因此方法blub
适用于所有这些对象。
最后,您可以创建一个像
这样的工厂方法function getInstance($objectType, $params){
if (!class_exists($objectType)) {
throw new Exception('Bad type');
}
$instance = new $objectType($params);
return $instance;
}
为了更深入的了解(基于php),您可以查看该博客文章
http://net.tutsplus.com/tutorials/php/understanding-and-applying-polymorphism-in-php/
答案 1 :(得分:0)
您可以使用变量作为类名,PHP允许,因为它是一种解释语言:
<?php
$class_name = "Report_" . ucfirst($type);
$object = new $class_name();
?>