티스토리 뷰

php

php namespace

gwni0214 2022. 4. 8. 15:29

 

네임스페이스

네임스페이스가 무엇인가를 정의하기에 앞서서 파일을 생각해보자. 파일은 데이터를 보관하고 있는 일종의 컨테이너다. 그리고 이 컨테이너는 파일명으로 식별이 된다. 파일의 수가 많아지면서 파일을 관리하는 것이 점점 어려워진다. 그래서 고안된 것이 바로 디렉토리다. 디렉토리를 이용하면 같은 이름의 파일이 하나의 컴퓨터에 존재할 수 있다. 파일명의 충돌을 회피 할 수 있게 된 것이다. 네임스페이스란 간단하게 디렉토리와 같은 것이라고 생각하자. 하나의 에플리케이션에는 다양한 모듈을 사용하게 된다. 그런데 모듈이 서로 다른 개발자에 의해서 만들어지기 때문에 같은 이름을 쓰는 경우가 생길 수 있다. 이런 경우 먼저 로드된 모듈은 나중에 로드된 모듈에 의해서 덮어쓰기 되기 때문에 이에 대한 대책이 필요하다. 네임스페이스가 필요해지게 되는 것이다.

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

greeting_en.php

1
2
3
4
<?php
function welcome(){
return 'Hello world';
}
 위의 코드에는 PHP 구문의 종료를 의미하는 닫히는 기호가 없다. 닫히는 기호는 생략이 가능하다.

greeting_ko.php

1
2
3
4
<?php
function welcome(){
return '안녕세계';
}

5.php

1
2
3
4
5
6
<?php
require_once 'greeting_ko.php';
require_once 'greeting_en.php';
echo welcome();
echo welcome();
?>

위의 코드는 아래와 같은 에러를 발생시킨다.

1
Fatal error: Cannot redeclare welcome() (previously declared in D:\BitNami\wampstack-5.4.12-0\apache2\htdocs\include\greeting_ko.php:3) in D:\BitNami\wampstack-5.4.12-0\apache2\htdocs\include\greeting_en.php on line 4

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

greeting_en_ns.php

1
2
3
4
5
<?php
namespace language\en;
function welcome(){
return 'Hello world';
}

greeting_ko_ns.php

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

6.php

1
2
3
4
5
6
<?php
require_once 'greeting_ko_ns.php';
require_once 'greeting_en_ns.php';
echo language\ko\welcome();
echo language\en\welcome();
?>

로드되는 파일의 초입에 키워드 namespace를 이용해서 네임스페이스를 만들었다. 그리고 네임스페이스를 사용할 때는 함수 앞에 네임스페이스의 이름을 붙여서 사용하면 된다. 이로서 동일한 이름의 함수를 하나의 php 에플리케이션 안에서 사용할 수 있게 되었다.

하나의 파일에는 복수의 네임스페이스가 존재 할 수도 있다.

greeting_lang.php

1
2
3
4
5
6
7
8
9
<?php
namespace language\en;
function welcome(){
return 'Hello world';
}
namespace language\ko;
function welcome(){
return '안녕세계';
}
1
2
3
4
5
<?php
require_once 'greeting_lang.php';
echo language\ko\welcome();
echo language\en\welcome();
?>

네임스페이스는 함수 뿐만 아니라 클래스와 상수에 대해서도 사용할 수 있다. 네임스페이스에 대한 자세한 내용은 아래의 자료들을 참고하자.

출처:https://opentutorials.org/course/62/5138

'php' 카테고리의 다른 글

php include  (0) 2022.04.08
php 배열  (0) 2022.04.08
php 함수  (0) 2022.04.08
php 반복문  (0) 2022.04.08
php 조건문  (0) 2022.04.08
댓글
© 2018 webstoryboy