动态类选择通过ENV变量

时间:2017-07-06 16:58:32

标签: php

我有一个Base类,它有一些基本功能和一些辅助方法。我想从这个类扩展不同的方法,超过10.所以我会class Foo extends Baseclass Bar extends Base等等。现在,就调用此方法而言,应用程序仅根据环境运行其中一个扩展,因此例如在生成new Foo()时调用并在开发时new Bar()被调用。

我对这些有一些基本的功能,但我担心它不会扩展和/或它不是最好的做事方式。我有一个名为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类。并且可能在将来,switch-case语句将变得无法忍受。

我可以做别的吗? 有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

我认为您应该尝试这种方法,不再需要切换语句,您不必再恐慌。

class ClassLoader{
     public static function init() {
      $class = getenv('CLASS_LOAD');
      if(class_exsists($class))
       return new $class;
      else
       throw new Exception("class not found");
  }
}

现在打电话。