나는 다음을 수행했다. 먼저 모든 웹 요청을 가로 채기 위해 가로 채기 필터를 만들었고 명령 줄 명령과 함께 사용할 수있는 버전도 만들었습니다.
두 인터셉터 모두 부트 스트랩 파일로 이동하여 오토로더를 설정합니다. 이 파일은 자동 로딩 기능 및 해시입니다. 해시의 경우 키는 클래스 이름이고 값은 클래스 파일의 파일 경로입니다. autoload 함수는 단순히 클래스 이름을 가져 와서 파일에서 require를 실행합니다.
필요한 경우 몇 가지 성능 향상 팁을 제공합니다. 파일을 정의 할 때 작은 따옴표를 사용하십시오. 해석되지 않기 때문에 약간 빠르기 때문에 _once 버전 대신 require/include를 사용하십시오. 한 번 실행하고 전자는 조금 더 빠릅니다.
위의 내용은 훌륭합니다. 사실 많은 클래스가있는 대규모 코드베이스에서도 해시가 그리 크지 않고 성능이 중요한 문제는 아닙니다. 그리고 더 중요한 것은 우리는 미친 pseudo 네임 스페이스 클래스 명명 규칙과 결혼하지 않았다고 봅니다. 아래를보십시오.
다른 옵션은 구분 된 이름, 의사 이름 공간 트릭입니다. 이름 공간에 5.3이 올만큼 매력적이지 않으므로 코드 기반에서 이름을 바꾸는 것이 덜 재미있을 것입니다. 그럼에도 불구하고 이것이 작동하는 방식이며 모든 코드에 대한 루트를 가정합니다. 그런 다음 모든 클래스는 '_'와 같은 문자로 구분 된 디렉토리 트래버 설을 기반으로 이름이 지정되고 클래스 이름 자체는 클래스의 이름을 따서 명명됩니다. 이렇게하면 클래스의 위치가 이름에 인코딩되며 자동 로더가이를 사용할 수 있습니다. really_long_crazy_class_names_MyClass 외에도이 메소드의 문제점은 각 호출에 대해 공정한 처리가 있지만 조기 최적화가 될 수 있으며 다시 이름 공간이오고 있다는 것입니다.
예 :
/code root
ClassA ClassA.php
/subfolder
subFolder_ClassB ClassB.php