Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 이름 확인(Name Resolution) 규칙 완벽 정리

개요

PHP 코드에서 네임스페이스(namespace) 이름이 등장할 때, 인터프리터는 정해진 규칙에 따라 해당 이름을 해석합니다. 이러한 이름 확인(Name Resolution) 규칙을 이해하면 네임스페이스 충돌을 피하고, use 문과 별칭(aliasing)을 올바르게 활용하는 데 큰 도움이 됩니다.

네임스페이스 이름의 세 가지 유형

1. 비한정 이름(Unqualified Name)

네임스페이스 구분 기호(백슬래시 \)가 포함되지 않은 식별자는 현재 네임스페이스를 참조합니다. 이를 비한정 이름이라고 부릅니다.

2. 한정 이름(Qualified Name)

myspace\space1처럼 구분 기호가 포함된 이름은 myspace 아래의 하위 네임스페이스인 space1로 해석됩니다. 이처럼 상대적인 위치를 나타내는 방식을 상대적 네임스페이스라고 합니다.

3. 완전 한정 이름(Fully Qualified Name)

백슬래시(\)로 시작하는 이름은 완전 한정 이름입니다. 예를 들어 \myspace 또는 \myspace\space1이 여기에 해당합니다.

완전 한정 이름은 항상 절대 네임스페이스로 해석됩니다. 즉, \myspace\space1은 어디에서 사용되든 myspace\space1 네임스페이스를 정확히 가리킵니다.

접두사 처리 규칙

  • 이름이 전역 네임스페이스에서 사용되면 namespace\ 접두사가 제거됩니다. 예를 들어 namespace\space1space1로 확인됩니다.

  • 반면, 다른 네임스페이스 내부에서 사용되면 다르게 처리됩니다. 예를 들어 namespace\space1myspace 네임스페이스 안에 있다면, 이는 myspace\space1과 동일하게 해석됩니다.

임포트 테이블(import table)에 의한 이름 변환

  • 한정 이름의 첫 번째 세그먼트는 현재의 클래스/네임스페이스 임포트 테이블(use 문으로 등록된 별칭 목록)에 따라 변환됩니다.

  • 적용 가능한 임포트 규칙이 없다면, 현재 네임스페이스가 해당 이름 앞에 자동으로 붙습니다.

  • 변환 대상은 이름의 종류에 따라 구분됩니다. 클래스와 유사한 이름(class-like names)은 클래스/네임스페이스 임포트 테이블을, 함수 이름은 함수 임포트 테이블을, 상수는 상수 임포트 테이블을 각각 따릅니다.

런타임에 수행되는 이름 확인

비한정 이름에 대해 임포트 규칙이 적용되지 않고, 해당 이름이 함수나 상수를 가리키며, 코드가 전역 네임스페이스 외부에 존재하는 경우에는 런타임(runtime)에 이름 확인이 이루어집니다.

이때 PHP는 먼저 현재 네임스페이스에서 해당 함수를 찾고, 찾지 못하면 전역 함수를 찾아 호출하는 폴백(fallback) 메커니즘을 사용합니다. 덕분에 네임스페이스 내부에서도 전역 함수를 별도의 import 없이 자연스럽게 호출할 수 있습니다.

정리

PHP의 이름 확인 규칙은 크게 이름의 형태(비한정·한정·완전 한정), 접두사 처리 방식, 임포트 테이블 적용 여부, 그리고 런타임 폴백 동작으로 구성됩니다. 이 규칙들을 숙지하면 대규모 프로젝트에서 네임스페이스를 더욱 안정적으로 설계하고 관리할 수 있습니다.