2011-02-09 2 views
0

나는 도서관이있는 젠드 프레임 워크를 사용하고 있는데 경로

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') 

하지만 다음의 모두를로드 할 생각 나는 명시 적으로 v1.10.8에서 하나 또는 V2.0.0에서 하나를 사용하도록 지시 어떻게 Zend_Form, 같은 클래스를 호출 할 때 ? 나는 어딘가에서 두 개의 라이브러리가 같은 클래스를 가지고 있다면 위의 라이브러리가 호출된다는 것을 기억한다. 그러나 2에서 어떻게 전환 할 수 있습니까? 같은 프로젝트에서 할 수 있습니까?

+3

동일한 스크립트 내에서 동일한 라이브러리의 여러 버전을 사용하려는 특별한 이유가 있습니까? –

+3

결론 : 전체적으로 불가능한 것은 아니지만, 추악한 코드의 주요 부분입니다. – Mchl

+0

@Mchi가 말했듯이, 그것은 할 수 있을지도 모르지만 나는 그것을 할 필요가 없도록 가능한 모든 것을 할 것입니다. 그것은 일어나기를 기다리고있는 악몽처럼 들린다. Like @Mark Baker 질문 : 왜 그것을하고 싶니? 그것을 피할 수있는 방법이있을 수 있습니다. –

답변

2

젠드 프레임 워크 2 클래스는 네임 스페이스 내에 그룹화되며 디렉토리를 살펴 보는 자체 오토로더를 가지고 있습니다 (디렉토리와 네임 스페이스 간의 1 : 1 관계 여야 함).

두 오토로더를 등록해야합니다 (여러 오토로더를 등록 할 수 있도록 SPL 자동 로딩을 사용하려면 ZF 1.10을 다시 작성해야 할 수도 있습니다.) 그 시점에서 오토로더는 모든 것을 스스로 처리해야합니다. ZF1 Zend_Form을로드하려고 시도하고 ZF2가 Zend \ Form을로드하려고 시도합니다 .ZF1 오토로더를 수정하여 실제 PHP 네임 스페이스를 사용하는 요청을 무시할 수 있습니다.

SPL 자동로드는 FIFO 클래스를 찾는 방법이므로 대부분 ZF2 클래스를 사용하려는 경우 먼저 오토로더를 등록하고 ZF1을 두 번째로 등록해야합니다. 그러면 성능이 크게 향상 될 것입니다.

+1

이 솔루션이 제대로 작동 할 수도 있지만 권장하지 않습니다. 네임 스페이스를 사용하는 프레임 워크와 두통에 부딪히게 될 네임 스페이스를 사용하지 않는 프레임 워크 사이에는 이러한 단절이 있습니다. –

+0

라이브러리에 자동 로더가없는 경우 일반적으로 다른 라이브러리에 대해 어떻게 작동합니까? 나는 이것을 가능한 한 가장 단순한 용어로 이해하려고 노력하고있다. 폴더 계층 구조에있는 여러 클래스의 라이브러리와 위에서 설명한대로 두 가지 버전이로드됩니다. 내 Zend 프로젝트에 하나의 클래스를로드하고 다른 클래스를로드하지 말라고 말하면 어떻게됩니까? (더 이상 2 개의 젠드 버전에 대해 이야기하지 않습니다. 일반적으로 라이브러리의 2 버전 만 사용) – jblue

+0

자체 오토로더 또는 기본 로더를 대체하는 가져 오기 메소드의 일종. PHP 문서에서 spl_autoload_register를 보자. 그러면 여러 차례 자동로드 메소드를 호출 할 수있다. 원하는 모든 프레임 워크에 대해 이론적으로 오토로더를 가질 수 있으므로 실제로는 클래스를로드 할 때마다 PHP가 등록한 각 오토로더를 반복하여 시도 할 때마다 성능 문제가됩니다. 적절한 파일을 찾으십시오. –