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