PHP문법 - 네임스페이스(1)
Author : 치치     Date :  2019-12-06 04:42:11   Views : 17회  

네임스페이스

 

네임스페이스란?

PHP에서 네임스페이스란 캡슐화 방법의 하나로써 추상적인 개념으로 볼 수 있습니다.

 

예를 들면, 운영체제에서 폴더는 일련의 파일들을 가지면서 그 파일들의 네임스페이스 역할을 합니다. 하나의 폴더 안에는 이름이 같은 파일이 두 개가 존재할 수 없지만 서로 다른 폴더에 같은 이름의 파일이 각각 존재할 수는 있는 것, 그것이 네임스페이스의 역할입니다.

네임스페이스는 라이브러리/애플리케이션 제작자가 함수나 클래스와 같이 재사용 가능한 코드 요소를 만들 때 다음 두 가지 경우를 해결하기 위해 설계되었습니다.

1. 개발자가 만들려는 이름과 PHP의 내부 클래스/함수/상수 등의 이름이 충돌하는 경우

2. 위 문제를 피하면서 소스코드의 가독성(readability)을 증가시키기 위해 부수적으로 이름이 길어지는 경우

PHP의 네임스페이스는 연관된 클래스, 인터페이스, 함수 및 상수를 그룹 하는 방식을 제공합니다.

 

 

네임스페이스 정의하기

모든 유효한 PHP 코드가 하나의 네임스페이스에 포함될 수는 있지만, 네임스페이스의 영향을 받는 코드 요소는 클래스, 인터페이스, 함수 그리고 상수 이렇게 4가지 유형이 있습니다.

[예제 코드]

<?php

namespace MyProject;

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

 

?>

Colored by Color Scripter

cs

 

네임스페이스는 namespace 키워드로 선언합니다. 이때 빈칸을 포함한 어떠한 NON-PHP 코드도 네임스페이스 선언문 앞에 올 수 없습니다.

[예제 코드]

<html>

<?php

namespace MyProject; // fatal error - namespace must be the first statement in the script

?>

Colored by Color Scripter

cs

 

하위 네임스페이스 선언 

 

운영체제에서의 폴더와 파일처럼, PHP 네임스페이스 또한 계층적 구조를 가질 수 있습니다. 따라서 네임스페이스의 이름은 하위레벨로 정의할 수 있습니다.

[예제 코드]

<?php

namespace MyProjectSubLevel;

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

 

?>

Colored by Color Scripter

cs

 

위 예제는 MyProjectSubLevelCONNECT_OK라는 상수, MyProjectSubLevelConnection이라는 클래스 및 MyProjectSubLevelconnect라는 함수를 생성합니다.

 

 

하나의 파일에 여러 개의 네임스페이스 정의하기

 

하나의 파일에 여러 개의 네임스페이스를 정의하기 위해 다음 두 가지 방법이 있습니다.

 

우선 간단한 문법의 조합을 이용하는 방법입니다.

[예제 코드]

<?php

namespace MyProject;

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

 

namespace AnotherProject;

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

?>

Colored by Color Scripter

cs

 

PHP에서는 이 방법을 추천하지 않습니다. 대신 다음과 같이 괄호로 묶는 방법을 추천합니다.

 

 

[예제 코드]

<?php

namespace MyProject {

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

}

 

namespace AnotherProject {

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

}

?>

Colored by Color Scripter

cs

 

사실 PHP는 하나의 파일에 여러 개의 네임스페이스를 정의하는 것 자체를 권장하지 않습니다. 주로 여러 개의 PHP 스크립트를 하나의 파일로 합칠 때 사용됩니다.

 

 

네임스페이스를 사용하지 않은 코드의 결합

 

만약 네임스페이스 없는 글로벌 영역의 코드를 결합하는 경우에는 글로벌 영역 코드를 이름 없는 네임스페이스를 정의하여 그 안에 괄호로 묶어야 합니다.

[예제 코드]

<?php

namespace MyProject {

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

}

 

namespace { // global code

session_start();

$a = MyProjectconnect();

echo MyProjectConnection::start();

}

?>

Colored by Color Scripter

cs

 

 

코드의 처음에 오는 declare 문을 제외하고는 그 어떠한 코드도 네임스페이스 괄호 바깥에 존재할 수 없습니다.

[예제 코드]

<?php

declare(encoding='UTF-8');

namespace MyProject {

 

const CONNECT_OK = 1;

class Connection { /* ... */ }

function connect() { /* ... */  }

}

 

namespace { // global code

session_start();

$a = MyProjectconnect();

echo MyProjectConnection::start();

}

?>

Colored by Color Scripter

cs

 

 

오늘 포스팅은 여기서 마치도록 하겠습니다.

 

다음번에는 네임스페이스의 기본 사용에 대해 알아보겠습니다.

 

감사합니다.

 

 





❌Delete 🛠Modify 🐣Reply 📄List
No Subject
Author Date Like Views