php - PHP 类的版本控制

标签 php web-services class namespaces version

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/

相关文章:

java - 根据android版本从两个版本的库中加载类

PHP:检查MySQL时间值是否大于5分钟

php - pdo 获取对象?

web-services - 如何创建使用 WS-Security 的 ColdFusion Web 服务客户端?

web-services - 获取/发布到RESTful Web服务

c# - 在构造类的新实例时,如何避免传递对父对象的引用?

php - Laravel 5 中执行哪个路由 http ://localhost:8000/my/8

php - 使用 count 函数确定 if 语句中显示的内容

asp.net-mvc - ASP.NET Web Api - 将对象发布到自定义操作 Controller

arrays - Swift:将文本字段保存在数组中