PHP 8.1 함수(예: 카테고리 이름)를 사용하여 네임스페이스 별칭을 만들 수 있나요?
회사의 기본 네임스페이스 모듈 이름을 "Subcompany"로 지정했으며 사용 범위가 확장되었으므로 이제 "Company"로 지정하려고 합니다.
완벽한 대답은 오버헤드를 최대한 줄이고 투명한 자동 로딩을 허용하는 것입니다. 한 가지 문제는 Intelephense와 같은 도구가 이 별칭을 이해한다는 것입니다.
이 프로젝트도 Composer를 사용하기 때문에 이를 사용하여 네임스페이스를 다시 작성하는 답변도 작동할 것입니다.
그렇습니다.
class_alias
는 새로운 네임스페이스 언어 기능과 함께 PHP 5.3과 함께 도입되었습니다. 이는 전역 네임스페이스에서 네임스페이스(실제로는 네임스페이스 간 )로 더 쉽게 마이그레이션할 수 있도록 만들어졌습니다.그러나 먼저 각 기존 클래스/인터페이스/특성/열거에 대한 클래스 이름을 새 대응 항목에 등록해야 합니다.
으아악오래된 도서관은 사라지고 이제 완전히 새로운 Tiger 도서관이 생겼습니다. 모든 클래스 등은 네임스페이스 접두사(
'MyOldLibName' -> 'MyTigerLibName'
)를 교체하여 매핑할 수 있습니다.PHP가 대부분의 작업을 수행하므로 이 작업은 런타임에 수행될 수 있습니다.
이전 네임스페이스 접두사를 기반으로 새 네임스페이스 접두사로 로드하고 이전 이름 앞에 카테고리 이름을 추가하는 자동 로더를 등록하세요.
예:
으아악이 코드는 매우 간단합니다. 등록 매개변수에 대한 두 가지 설명만 있으면 됩니다.
$throw = true
: 별칭 자동 로더가 등록에 실패하면 즉시 응용 프로그램을 중지해야 합니다. 그렇지 않으면 나중에 이상한 "클래스를 찾을 수 없음" 오류가 발생합니다.$prepend = false
: 이전 클래스 이름을 사용하는 코드가 아직 있는 경우에만 콜백을 호출해야 합니다. 따라서 이제 새 네임스페이스와 표준 자동 로딩을 사용하여 표준 코드가 먼저 제공됩니다.아마도 주목할 가치가 있는 부분은
으아악class_exists()
부분입니다:새 클래스가 아직 로드되지 않은 경우 자동 로드가 시작됩니다.
오토로더를 등록한 후 이전 코드는 이전 별칭 아래에 새 클래스를 자동으로 로드합니다.
으아악전체 예시는-
3v4l.org에 있습니다.