같은 파일에서 여러 네임스페이스 정의하기
같은 파일에서 여러 네임스페이스 정의하기 (Defining multiple namespaces in the same file)
한 파일 안에서 여러 네임스페이스를 선언하는 두 가지 문법(단순 결합·괄호(bracketed) 문법)을 다룬다. 권장되는 방식과 전역 코드를 네임스페이스와 함께 쓰는 방법을 예제로 설명한다.
본문
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
같은 파일에 여러 네임스페이스를 선언할 수도 있습니다. 두 가지 허용된 문법이 있습니다.
예제 #1 여러 네임스페이스 선언, 단순 결합 문법
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
이 문법은 여러 네임스페이스를 단일 파일로 결합할 때 권장되지 않습니다. 대신 대체 문법인 괄호(bracketed) 문법을 사용하는 것이 좋습니다.
예제 #2 여러 네임스페이스 선언, 괄호 문법
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
여러 네임스페이스를 같은 파일로 결합하는 것은 코딩 관행으로서 강력히 권장되지 않습니다. 주된 사용 사례는 여러 PHP 스크립트를 같은 파일로 결합하는 것입니다.
전역 코드(네임스페이스가 없는 코드)를 네임스페이스 코드와 결합하려면 오직 괄호 문법만 지원됩니다. 전역 코드는 네임스페이스 이름이 없는 namespace 문에 감싸야 합니다. 예를 들어 다음과 같습니다.
예제 #3 여러 네임스페이스와 네임스페이스 없는 코드 선언
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection {
public static function start() {
print __METHOD__ . "\n";
}
}
function connect() {
print __FUNCTION__ . "\n";
}
}
namespace { // global code
print strlen("hi") . "\n";
MyProject\connect();
MyProject\Connection::start();
}
여는(여는) declare 문을 제외하고, 네임스페이스 괄호 밖에는 어떤 PHP 코드도 존재할 수 없습니다.
예제 #4 여러 네임스페이스와 네임스페이스 없는 코드 선언
<?php
declare(strict_types=1);
namespace MyProject {
const CONNECT_OK = 1;
class Connection {
public static function start() {
print __METHOD__ . "\n";
}
}
function connect() {
print __FUNCTION__ . "\n";
}
}
namespace { // global code
print strlen("hi") . "\n";
MyProject\connect();
MyProject\Connection::start();
}
더 알아보기
- 네임스페이스 정의하기 (Defining namespaces)
declare문과strict_types- 전역 공간 (Global Space)