通常如何在PHP中创建动态工厂方法?通过动态工厂方法,我指的是一种工厂方法,它将根据给定参数的某些方面自动发现要创建的对象。最好不要先在工厂登记。不过,我同意将可能的对象放在一个公共位置(目录)中。
我想避免在工厂方法中使用您的典型switch语句,例如:
public static function factory( $someObject )
{
$className = get_class( $someObject );
switch( $className )
{
case 'Foo':
return new FooRelatedObject();
break;
case 'Bar':
return new BarRelatedObject();
break;
// etc...
}
}
我的具体案例涉及工厂根据要投票的项目创建投票存储库。这些项都实现了
Voteable
接口。像这样:
Default_User implements Voteable ...
Default_Comment implements Voteable ...
Default_Event implements Voteable ...
Default_VoteRepositoryFactory
{
public static function factory( Voteable $item )
{
// autodiscover what type of repository this item needs
// for instance, Default_User needs a Default_VoteRepository_User
// etc...
return new Default_VoteRepository_OfSomeType();
}
}
我希望能够在不涉及工厂实现的情况下,访问新的可投票项目并为这些项目投票存储库。