따라서 새 라이브러리 인 프로젝트에 모듈 식 코드 / 라이브러리를 포함해야합니다.
도서관 A :
a.php: class A;
라이브러리 B : (A에서 v1.0 체크 아웃)
b.php: include_once a.php; class B extends A;
라이브러리 C : (A에서 v2.0 체크 아웃)
c.php: include_once a.php; class C extends A;
도서관 D :
d.php: include_once b.php,c.php;
이것은 분명히 이름 충돌 ( cannot redeclare A
)로 이어집니다 .
다른 곳에서 자주 가져 오기 때문에 두 라이브러리 중 하나를 만질 수 없습니다. 또한 결과가 다른 라이브러리가되어야하므로 중첩 된 네임 스페이스는 옵션이 아닙니다. 하지만 같은 문제를 가진 다른 프로젝트가 많이있을 것 같아요 ?? 제안 해 주셔서 감사합니다.
대신 require_once 또는 include_once를 사용할 수 있습니다 include
.
포함 된 클래스를 추적하고 확인하기 위해 메모리 및 처리를 사용해야하므로 성능에 영향을 미칠 수 있지만 가장 쉬운 솔루션입니다. 얼마나 많은 작업을 수행하는지는 단일 페이지로드에서 include / require_once의 수에 따라 다릅니다.
더 복잡한 것들은 클래스 자동 로더를 구현하지만 거기에 가고 싶지 않을 수도 있습니다.
편집하다--
내가 당신의 문제를 잘 이해한다면 그것은 의존성 문제입니다. 라이브러리 B와 C는 모두 A를 참조하지만 각각 다른 버전의 A를 참조합니다.이 경우 솔루션은 사소한 것이 아닙니다. require_once 또는 include_once를 사용하면 A의 처음로드 된 버전이 결정되지 않게됩니다. include를 사용하면 클래스가 중복됩니다. 이러한 기능만으로는 문제를 해결할 수 없다고 생각합니다. 해야 할 일은 라이브러리 종속성을 관리하는 것입니다.
예를 들어, 여러 버전의 클래스 라이브러리를 인식하고 가장 최근 버전을로드하는 오토로더 (이는 버전간에 역 호환성을 유지한다고 가정). 중첩 된 클래스를 사용하여 각 라이브러리의 종속성을 격리하고 독립적으로 유지할 수도 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다