-
PHP 5.3.0 에서 도입되었다.
PHP 코드를 운영체제의 파일시스템 디렉터리 구조처럼 가상 계층 구조로 구성하는 중요한도구다.
네임스페이스 선언 :
namespace Symfony\Component\HttpFoundation;
맨앞에 있는 Symfony 가 벤더네임스페이스라 칭한다.
벤더네임스페이스 -> 최상위 네임스페이스.
그 하위로 있는 Component는 서브네임스페이스라 부른다.
PHP 네임스페이스는 운영체제의 물리적 파일시스템과는 달리 가상 개념이며 파일시스템 디렉터리와 1:1로 대응할 필요가 없음.
대부분 PHP 컴포넌트가 서브네임스페이스를 파일시스템 디렉터리에 맞춘다.PSR-4 (PHP Standard RecommendationPHP)
오토로더 표준과의 호환성을 위해서.
자 그럼 네임스페이스를 선언한 php 코드와 네임스페이스를 선언하지 않은 코드를 비교해보자
선언하지 않은것
$response = new \Symfony\Component\HttpFoundation\Response('앗',400);
$response->send();
선언한것
use Symfony\Component\HttpFoundation;
$response = new Response('앗',400);
$response->send();
별칭을 줄수도있음
use Symfony\Component\HttpFoundation as Res;
use 키워드로 코드를 임포트 할때는 네임스페이스 맨 앞에 \ 문자를 붙이지 않아도 된다. 왜냐하면 이 경우 PHP는 임포트된 네임스페이스가 완전히 정규화 되었다고 간주하기 때문이다.
PHP 5.6 부터 함수와 상수를 임포트 할수있다.
함수임포트 use func Namespace\functionName;
상수임포트 use constant Namespace\functionName;
하나의 파일에 여러 네임스페이스를 정의할수있다. 하지만 권장하지 않는 방법이라고 한다.
ex)
namespace Foo{
//클래스,인터페이스,함수, 상수 정의
}
namespace Bar{
//클래스,인터페이스,함수, 상수 정의
}
네임스페이스 없이 클래스, 인터페이스 , 함수 , 상수를 참조하면 php는 현재 네임스페이스에 존재한다고 간주한다.
ex)
namespace My\Test
class work
{
public funtion doSomething()
{
$exception = new Exception();
//위와 같이 처리할시에 네이티브 Exception 클래스가 아니라 존재하지 않는 \My\Test\Exception 클래스를 찾기때문이다.
이렇게 바꾸어야한다. new \Exception 으로 변경해야 전역네임스페이스에서 찾는다.
}
}
JAVA에 패키지의 개념과 비슷한듯 하다, 하지만 물리적 파일위치와 상관없다는 부분에 대해서는 상이한듯하다.
(여러개의 컴포넌트를 사용할시에 중복되는 이름을 방지하기위해서 사용하는듯 보인다. ex) :: request , response, session 등등 )
하지만 에러가 나지 않는다고해도 물리적인 위치와 맞추는듯 보인다.
use 키워드는 자바에 import 와 같다고 보아도 무방할것같다.
'개발 > php' 카테고리의 다른 글
PHP redis 연동 (0) 2018.11.09 php 에서 한글포함 여부를 체크해보자 (0) 2018.11.09 Php open_tag 관련 (0) 2016.08.13 트레이트 (0) 2016.08.07 PHP 엔진 (0) 2016.08.07