加载同一个库的多个版本

时间:2011-02-09 14:22:05

标签: php oop zend-framework

我正在使用一个库Zend Framework,它有路径

ZendFramework-1.10.8/library/Zend/

我将它加载到index.php

realpath(CENTRAL_LIBS_PATH . '/ZendFramework-1.10.8/library'), // /Zend left out

因此可以使用Zend_Form_

调用其中一个类

现在我的问题是,如何使用同一个库的多个版本。我想我会加载index.php中的两个

realpath(CENTRAL_LIBS_PATH . '/ZendFramework-1.10.8/library'),
realpath(CENTRAL_LIBS_PATH . '/ZendFramework-2.0.0/library')

但是当我调用像Zend_Form这样的类时,如何明确告诉它使用v1.10.8中的那个或v2.0.0中的那个?我记得在某个地方读过如果2个库有相同的类,上面的库就是那个叫做的库。但我如何随意在2之间切换?可以在同一个项目中完成吗?

1 个答案:

答案 0 :(得分:2)

Zend Framework 2类在命名空间内分组,并有自己的自动加载器,可以查看目录(目录和命名空间之间的关系应该是1:1)。

您需要注册两个自动加载器(您可能需要重写ZF 1.10以使用SPL自动加载,以便您可以注册多个自动加载器。此时自动加载器应自行处理所有内容,因为ZF1将如何区别尝试加载Zend_Form,ZF2将尝试加载Zend \ Form。我可能会继续修改ZF1自动加载器以忽略任何使用真正的PHP名称空间的请求。

不要忘记,SPL自动加载使用FIFO方法查找类,因此如果您打算主要使用ZF2类,则应先注册其自动加载器,然后再注册ZF1,因为它会为您提供良好的性能提升。 / p>