>  Q&A  >  본문

PHP에서 전체 네임스페이스에 대한 별칭을 만들 수 있나요?

PHP 8.1 함수(예: 카테고리 이름)를 사용하여 네임스페이스 별칭을 만들 수 있나요?

회사의 기본 네임스페이스 모듈 이름을 "Subcompany"로 지정했으며 사용 범위가 확장되었으므로 이제 "Company"로 지정하려고 합니다.

완벽한 대답은 오버헤드를 최대한 줄이고 투명한 자동 로딩을 허용하는 것입니다. 한 가지 문제는 Intelephense와 같은 도구가 이 별칭을 이해한다는 것입니다.

이 프로젝트도 Composer를 사용하기 때문에 이를 사용하여 네임스페이스를 다시 작성하는 답변도 작동할 것입니다.

P粉252423906P粉252423906300일 전380

모든 응답(1)나는 대답할 것이다

  • P粉613735289

    P粉6137352892024-01-17 11:10:42

    그렇습니다. class_alias는 새로운 네임스페이스 언어 기능과 함께 PHP 5.3과 함께 도입되었습니다. 이는 전역 네임스페이스에서 네임스페이스(실제로는 네임스페이스 간 )로 더 쉽게 마이그레이션할 수 있도록 만들어졌습니다.

    그러나 먼저 각 기존 클래스/인터페이스/특성/열거에 대한 클래스 이름을 새 대응 항목에 등록해야 합니다.

    으아악

    오래된 도서관은 사라지고 이제 완전히 새로운 Tiger 도서관이 생겼습니다. 모든 클래스 등은 네임스페이스 접두사('MyOldLibName' -> 'MyTigerLibName')를 교체하여 매핑할 수 있습니다.

    PHP가 대부분의 작업을 수행하므로 이 작업은 런타임에 수행될 수 있습니다.

    이전 네임스페이스 접두사를 기반으로 새 네임스페이스 접두사로 로드하고 이전 이름 ​​앞에 카테고리 이름을 추가하는 자동 로더를 등록하세요.

    예:

    으아악

    이 코드는 매우 간단합니다. 등록 매개변수에 대한 두 가지 설명만 있으면 됩니다.

    1. $throw = true: 별칭 자동 로더가 등록에 실패하면 즉시 응용 프로그램을 중지해야 합니다. 그렇지 않으면 나중에 이상한 "클래스를 찾을 수 없음" 오류가 발생합니다.
    2. $prepend = false: 이전 클래스 이름을 사용하는 코드가 아직 있는 경우에만 콜백을 호출해야 합니다. 따라서 이제 새 네임스페이스와 표준 자동 로딩을 사용하여 표준 코드가 먼저 제공됩니다.

    아마도 주목할 가치가 있는 부분은 class_exists() 부분입니다:

    으아악

    새 클래스가 아직 로드되지 않은 경우 자동 로드가 시작됩니다.

    오토로더를 등록한 후 이전 코드는 이전 별칭 아래에 새 클래스를 자동으로 로드합니다.

    으아악
      전체 예시는
    • 3v4l.org에 있습니다.

    회신하다
    0
  • 취소회신하다