Possible Duplicate:
Loading multiple versions of the same class
设置不同版本的 PHP 类并根据配置值切换它们的最佳方法是什么?
这是我的场景(使用 Zend Framework - 应该不重要,但可能):
我有 2 个不同版本的 Web 服务,我希望能够调用它们。我需要使用配置文件中的值在它们之间切换。
现在,我有一个充当工厂的类,并根据配置值确定需要返回该类的版本。工厂返回的类的两个版本都扩展相同的抽象类,因此一旦工厂返回对象,我就可以在代码的其余部分中将这两个版本视为相同。从理论上讲,这对我来说似乎很好,但最终我在工厂类中得到了如下所示的代码,这似乎不是一个好的做法:
require_once APPLICATION_PATH . '/models/Search/SearchModelV' . $this->config->model->version . '.php';
$model_class = 'Search_Model_V' . $this->config->model->version;
return new $model_class();
我使用的是 PHP 5.3,因此我实现了命名空间。只是把它扔掉,以防它可以用作解决方案。
最佳答案
我认为解决方案可能是“工厂”模式。这意味着您有一个静态函数,可以根据参数创建适当的对象。即使在抽象类上也是可能的,因为您可以在抽象类上声明和调用静态方法。
abstract class Search_Model_Abstract {
public static function create($version) {
$class = 'Search_Model_V' . $version;
return new $class;
}
}
然后,您可以使用 Search_Model_Abstract::create($this->config->model->version)
创建适当的对象
请注意,此方法实际上还应该处理可能从构造函数抛出的任何异常,并且还应该检查 $version
是否有可能的值。
关于php - PHP 类的版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743319/