0
我有一个Base
类具有一些基本功能和一些辅助方法。我想从这个类扩展不同的方法,超过10个。所以我会有class Foo extends Base
和class Bar extends Base
等等。现在就调用这些方法而言,应用程序仅根据环境运行这些扩展中的一个,因此例如生产new Foo()
被调用并且开发new Bar()
被调用。动态类选择通过ENV变量
我对这些有一些基本的功能,但恐怕它不会扩展和/或它不是最好的办法。我有一个名为CLASS_LOAD='bar'
的ENV变量。这是我的代码和我是如何做它至今:
class Base {
//
}
class Foo extends Base {
//
}
class Bar extends Base {
//
}
class ClassLoader {
public static function init() {
switch (getenv('CLASS_LOAD')) {
case 'bar':
return new Bar();
case 'foo':
return new Foo();
default:
throw new Exception();
}
}
}
而且我在应用程序中调用这个方法是:
$class = ClassLoader::init();
这工作得很好,现在我想,但我会每次添加Base类的新扩展时,都要不断更新ClassLoader类。并且可能在未来,开关盒声明将变得难以忍受。
我可以做点别的吗? 任何想法?
感谢
我有一个想法,你应该将类名传递给init函数参数,并通过一些方法创建它的实例并使用这个实例,这样你就不需要switch语句。 – sagar