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

PHP 네임스페이스 선언 방법과 규칙 완벽 정리

개요

PHP에서 네임스페이스(namespace)는 클래스, 함수, 상수의 이름 충돌을 방지하고 코드를 논리적으로 그룹화하는 강력한 기능입니다. 네임스페이스 내부에 클래스, 함수, 상수를 선언하면 해당 요소들의 접근 방식에 영향을 미치지만, 네임스페이스 안에는 이 외의 일반적인 PHP 코드도 함께 포함될 수 있습니다.

새로운 네임스페이스를 선언할 때는 PHP의 namespace 키워드를 사용합니다. 가장 중요한 규칙은 네임스페이스 선언문이 반드시 파일의 맨 앞에 위치해야 한다는 것입니다. 즉, .php 확장자를 가진 파일에서 <?php 태그 바로 다음 첫 번째 줄에 네임스페이스 선언이 있어야 하며, HTML 코드나 다른 스크립트보다 먼저 나와야 합니다.

네임스페이스 선언 예제

다음은 myspace라는 네임스페이스를 선언하고 그 안에 클래스와 함수를 정의하는 기본적인 예제입니다.

<?php
namespace myspace;
class myclass {
    //
}
function hello() {
    echo "Hello World\n";
}
?>

위 코드처럼 네임스페이스 선언이 파일 최상단에 위치하면 아무 문제 없이 정상적으로 동작합니다.

선언 위치가 잘못된 경우 발생하는 오류

만약 네임스페이스 선언이 파일의 맨 위가 아닌 곳, 예를 들어 HTML 출력 코드 뒤에 위치하면 어떻게 될까요? PHP 파서는 치명적인 오류(fatal error)를 발생시킵니다.

잘못된 예제

<html>
<body>
Hello world
<?php
namespace myspace;
function hello() {
    echo "Hello World\n";
}
use myspace;
myspace\hello();
?>
</body>
</html>

실행 결과(오류 메시지)

PHP Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script

오류 메시지를 해석해 보면 "네임스페이스 선언문은 반드시 스크립트의 첫 번째 문장이거나, declare 호출 이후에 위치해야 합니다"라는 의미입니다.

예외: declare 구문은 네임스페이스 선언 전에 허용됨

네임스페이스 선언 앞에는 오직 declare 구문만 올 수 있다는 예외가 있습니다. 대표적으로 엄격한 타입 검사를 활성화하는 strict_types=1 선언이 있습니다.

정상 동작하는 예제

<?php
declare(strict_types=1);
namespace myspace;
function hello() {
    echo "Hello World\n";
}
use myspace;
myspace\hello();
?>

위 코드는 declare(strict_types=1);이 네임스페이스 선언보다 먼저 나왔기 때문에 오류 없이 정상적으로 실행됩니다.

정리

  • 네임스페이스는 namespace 키워드로 선언하며, 이름 충돌을 방지하고 코드 구조를 체계화합니다.
  • 네임스페이스 선언문은 <?php 태그 직후 파일의 첫 번째 문장이어야 합니다.
  • HTML 등 다른 코드가 먼저 출력된 후 네임스페이스를 선언하면 PHP 치명적 오류가 발생합니다.
  • 유일한 예외로 declare 구문(예: strict_types=1)은 네임스페이스 선언 앞에 위치할 수 있습니다.