네임스페이스 – 07.전역 공간

PHP 5.3 이전의 네임스페이스

PHP 5.3 이전에도 내장된 네임스페이스가 존재하고 있었습니다.

test() 함수 내에서 동일한 변수이름 $str이 두 번 사용되고 있지만 하나는 지역 네임스페이스, 다른 하나는 전역 네임스페이스의 이름을 참조합니다. 따라서 이 소스를 실행하면 아래와 같이 나타날 것입니다.

  • 전역 네임스페이스 – 함수(또는 클래스) 바깥쪽에서 정의된 이름
  • 지역 네임스페이스 – 함수(또는 메소드) 안에서 정의된 이름 또는 클래스 안에서 정의된 이름

이와 같이 PHP 5.3 이전에도 내장된 네임스페이스가 존재하고 있어서 묵시적implicit으로 사용하여 왔으나, PHP 5.3 부터는 프로그래머가 새로운 네임스페이스를 직접 명시적explicit으로 정의하여 사용할 수 있도록 하였습니다.

전역 공간; 전역 네임스페이스

네임스페이스를 지원하는 PHP 5.3에서 네임스페이스가 정의되지 않은 클래스 및 함수는 전역 공간global space; global namespace에 배치됩니다.

전역 공간은 특정한 네임스페이스 이름을 가지고 있지 않기 때문에, 전역 공간에서의 __NAMESPACE__ 상수* 값은 빈문자열입니다.

* 컴파일-타임 상수인 __NAMESPACE__의 값은 현재 네임스페이스 이름에 해당하는 문자열을 가지고 있습니다.

따라서 전역 공간은 네임스페이스-식별자\함수-이름과 같은 식으로 참조할 수가 없으므로 네임스페이스 식별자 없이 백슬래시backslash로 시작되는, 즉 \함수-이름과 같은 식으로 전역 공간에 배치된 함수를 참조합니다.

전역 공간의 엘리먼트 참조

전역 클래스 참조

백슬래시가 없는 엘리먼트-이름unqualified name은 현재 네임스페이스 이름을 기준으로 처리되기 때문에 전역 클래스를 참조하기 위해서는 전역 클래스임을 나타내 주어야 합니다.

use 문으로 전역 클래스 이름을 임포팅하여 해당 클래스를 참조할 수 있습니다.

또는 아래와 같이 선행 백슬래시를 붙여 절대-이름fully qualified name으로 전역 클래스를 참조해야 합니다.

전역 함수 또는 상수 참조

백슬래시가 없는 엘리먼트-이름unqualified name의 함수 또는 상수를 참조할 때, 현재 네임스페이스에 해당 함수 또는 상수가 없으면 전역 공간에 있는 함수 또는 상수를 폴백fallback합니다.

* 폴백fallback이란 어떤 기능이 제대로 동작하지 않을 때, 이에 대처하는 기능 또는 동작을 의미합니다. 네임스페이스에서 폴백fallback은 현재 네임스페이스에서 지원하지 못하는 함수 또는 상수 대신에 자동으로 전역 함수 또는 전역 상수를 호출해 준다는 의미입니다.

동일한 이름이 현재 네임스페이스에 정의된 경우

전역 클래스, 함수 또는 상수와 동일한 이름이 현재 네임스페이스에 정의되어 있는 경우, 전역 클래스, 함수 또는 상수를 참조하려면 \strlen(), \Exception 또는 \INI_ALL과 같은 절대-이름fully qualified name을 사용할 수 있습니다.

또는 전역 클래스, 함수 또는 상수의 별칭을 부여하여 참조할 수 있습니다.

또는 임포팅이 컴파일 시간에 수행되는 특성을 이용하여 전역 클래스, 함수 또는 상수를 참조할 수 있습니다. 이 예제는 PHP 7부터 실행할 수 있습니다.

답글 남기기