관리 메뉴

FU11M00N

[ PHP ] php namespace 본문

SUA 정보보안/php

[ PHP ] php namespace

호IT 2021. 2. 13. 06:41

https://www.inflearn.com/course/%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9-php-%EA%B0%95%EC%A2%8C

 

 

생활코딩의 이고잉 님의 강의를 기반으로 개인 공부용으로 정리한 포스팅입니다.

 

 

 


 

 

- namespace

파일은 데이터를 보관하고 있는 일종의 컨테이너입니다.

컨테이너는 파일명으로 식별됩니다.

 

파일의 수가 많아지면 파일을 관리하는 것이 점점 어려워지는데 이때 고안된 것이 디렉터리입니다.

 

디렉터리를 이용하면 같은 이름의 파일이 하나의 컴퓨터에 존재할 수 있습니다.

파일명의 충돌을 회피할 수 있게 된 것입니다.

하지만 모듈이 서로 다른 개발자에 의해서 만들어지기 때문에 같은 이름을 쓰는 경우가 생길 수 있습니다.

이런 경우 먼저 로드된 모듈은 나중에 로드된 모듈에 의해 덮어쓰기 되기 때문에 이에 대한 대책이 필요합니다.

 

이때 네임스페이스가 필요합니다.

 

만약 환영인사를 언어별로 다르게 하고 싶다면 어떻게 해야 할까요? 3개의 파일을 만든다

 

 

<?php
function welcome(){
    return 'Hello';
}

english.php

<?php
function welcome(){
    return '안녕';
}

korean.php

 

<?php
require_once 'greeting_ko.php';
require_once 'greeting_en.php';
echo welcome();
echo welcome();
?>

namespace_test.php

 

 

namespace_test.php를 실행시키면 아래와 같은 에러가 발생합니다.

 

로드한 두 개의 파일 모두 welcome라는 함수를 선언했기 때문이다. PHP에서는 함수의 중복 선언을 허용하지 않는다. 이런 경우 네임스페이스를 사용할 수 있다. 아래와 같이 로드되는 파일의 내용을 수정해보자.

 

로드한 두개의 파일 모두 "welcome"이라는 같은 이름의 함수를 선언했기 때문입니다.

php에서는 함수의 중복 선언을 허용하지 않기 때문에

이럴 때 네임스페이스를 사용할 수 있습니다.

 

 

<?php
namespace language\en;
function welcome(){
    return 'Hello world';
}

english_ns.php

<?php
namespace language\ko;
function welcome(){
    return '안녕하세요';
}

korean_ns.php

 

<?php
require_once 'korean_ns.php';
require_once 'english_ns.php';


echo language\ko\welcome();
echo language\en\welcome();
?>

namespace_test2.php

 

결괏값

로드되는 파일의 초입에 키워드 "namespace"를 이용하여 네임스페이스를 사용했습니다.

 

그 후 네임스페이스를 사용할 때는 함수 앞에 네임스페이스의 이름을 붙여서 사용하면 됩니다.

이로서 동일한 이름의 함수인 "welcome" 함수를 하나의 php 파일에서 실행되도록 했습니다.

 

 

 

 

 

 

 

 

SUA 정보보안 멘토링에 참여하고 있습니다.

 

 

 

'SUA 정보보안 > php' 카테고리의 다른 글

[ PHP ] 쿠키와세션 , 예제  (0) 2021.02.14
[ PHP ] php 파일업로드  (0) 2021.02.14
[ PHP ] php include  (0) 2021.02.13
[ PHP ] php 연관배열  (0) 2021.02.13
[ PHP ] php 배열 제어  (0) 2021.02.13
Comments