ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네임스페이스
    개발/php 2016. 8. 7. 11:28

    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
Designed by Tistory.