매우 간단하게 처리해야하므로 다소 혼란 스럽습니다.호출자와 동일한 네임 스페이스에있는 클래스에 대해 클래스를 찾을 수 없음 오류
I의 구조는 다음과 같습니다
클래스 X :
namespace A;
use \B\Y;
class X
{
public function __construct()
{
$y = new Y();
}
}
클래스 Y :
namespace B;
class Y
{
public function __construct()
{
$z = new Z();
}
}
클래스 Z :
을namespace B;
class Z
{
public function __construct()
{
...
}
}
주요 프로그램 :
namespace A;
$x = new X();
당신이 볼 수 있듯이 클래스 A는 (주 프로그램과 동일하다) 다른 네임 스페이스에있는 동안, 클래스 Y 및 Z는 같은 네임 스페이스에있는
이 주 프로그램을 실행하려고하면 오류 메시지 PHP Fatal error: Class 'Z' not found
이 표시됩니다.
프로그램을 디버그하고 오토로더 안에 중단 점을 넣으면 클래스 Y가 \ B \ Y로로드되지만 클래스 Z가 네임 스페이스 한정자없이로드되는 것을 볼 수 있습니다 (다른 클래스에서 사용 중입니다). 동일한 네임 스페이스에서). 문제는 클래스 Z가 네임 스페이스 한정자없이로드되는 이유는 무엇입니까?
나는 namespace 한정자없이 서로 참조하는 네임 스페이스 B에 꽤 많은 클래스를 가지고 있습니다. 그리고 모두를 변경하는 것은 아주 힘들지 만 불가능하지는 않습니다.
예에서 클래스'Z'는 실제로'Y'라고합니다. 나는 (고정 클래스 Z로) 샘플을 테스트했고 기본 자동로드 기능으로 잘 작동하는 것 같다. – Pieter
@Pieter 그래, Z 복사/붙여 넣기 오류 야. 그렇다면 오토로더에서 왜 프로젝트 고유의 문제를 다루는 커스텀 오토로더 (custom autoloader)라고 생각합니까? 요청 된 클래스 이름에는 네임 스페이스가 없습니다. –
실제 오토로더 코드를 제공하지 않으면 말할 수 없습니다. 이 오토로더를 사용하면 다음과 같이 작동합니다 :'($ class) {require_once __DIR__. '/'. 프로젝트 구조와 함께 PSR-0을 사용하십시오). – Pieter