# PHP ## 모던 PHP 개념 ### Namespace PHP에서 namespace를 사용하는 목적은, 다른 언어와 마찬가지로 여러 클래스나 함수 등을 재사용하기 위해서다. 특히, 크게 두 가지 목적을 갖는다. 1. 사용자 생성 코드와 내부/서드파티 클래스/함수/상수 등을 구별하기 위함 2. 1번 문제를 해결하는 과정에서 클래스/함수/상수 등의 이름이 너무 길어지는 현상을 방지하고, 더 짧게 대체하거나 줄이기 위함 #### 정의 하나의 네임스페이스가 하나의 파일에서만 정의될 필요는 없으며, 네임스페이스와 동일한 파일명을 가질 필요도 없다. 반대로 하나의 파일에서 여러 개의 네임스페이스를 정의하는 것도 가능하다. 네임스페이스에 종속되는 요소는 클래스, 인터페이스, 함수, 상수의 네 가지다. 네임스페이스는 파일 맨 앞에 `namespace ` 형식으로 명시한다. 즉 해당 라인과 `\\\...` 식으로 그 계층구조를 명시할 수 있다. 인터페이스/클래스/함수/상수 등도 동일한 규칙을 따른다. 즉 `namespcae` 네임스페이스 내의 `class` 클래스를 호출할 경우, `namespace\class` 형태로 호출할 수 있다. 만약 하나의 파일에 여러 네임스페이스에 대한 정의를 담을 경우, 각 네임스페이스마다 중괄호로 블록을 형성하는 것을 권장한다. 그렇게 하지 않아도 상관없으나, 가독성 차원에서 추천하지 않는다. ```php ``` #### 사용 PHP에서 namespace를 사용하는 방식은 PHP가 파일을 다루는 규칙(상대경로 / 절대경로)와 유사하다. 1. 상대경로: 현재 네임스페이스 (또는 다른 파일에 정의된 하위 네임스페이스)에 정의된 클래스 등을 사용할 경우, 현재 네임스페이스의 이름을 생략할 수 있다. 2. 절대경로: 네임스페이스의 full path를 명시한다. ```php ```