반응형
네임스페이스
출처:
https://opentutorials.org/course/3018/5138
https://www.lesstif.com/laravelprog/name-space-24445772.html
함수, 상수, 클래스 같은 것들의 이름을 의미함
그래서 같은 이름을 갖지고 있는 함수,상수,클래스의 충돌을 방지하기 위한 수단을 네임 스페이스 라고 한다.
네임스페이스의 정의
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
네임스페이스는 최상단에 위치해야한다.
<html>
<?php
namespace MyProject; // fatal error - namespace must be the first statement in the script
하위 네임 스페이스 정의
네임스페이스는 계층구조로 지정할 수 있다.
<?php
namespace MyProject\Sub\Level;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
같은 파일내에서 다중 네임스페이스 정의
동일한 파일에서 여러 네임 스페이스를 선언가능
예제1: 여러 네임 스페이스 선언, 간단한 조합 구문
<?php
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
예제2: 여러 네임 스페이스 선언, 대괄호 구문
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
예제3: 여러 네임 스페이스와 네임 스페이스가없는 코드 선언
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // global code
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
use
사용할 때마다 전체 네임스페이스를 기술하기 번거로울 경우 use 키워드를 사용
Book.php
<?php
namespace WikiBooks;
class Book
{
public function show() {
echo "wikibooks\n";
}
}
Use.php
<?php
include "Book.php";
use WikiBooks\Book;
$b = new Book();
as 키워드를 사용하여 클래스에 별칭을 부여할 수 있음
<?php
include "Book.php";
use WikiBooks\Book as MyBook;
$b = new MyBook();
현재 네임스페이스보다 상위에 있는 클래스를 사용하려면 다음과 같이 네임스페이스 앞에 슬래시를 붙여주면 전역 네임스페이스에서 클래스를 찾음
<?php
namespace WikiBooks;
use \FileLog\Logger;
class Book
{
public function show() {
echo "wikibooks\n";
// 정상동작
Logger.info("show function");
}
}
참고
CI4 에서는 psr4 배열을 사용하면 네임스페이스를 해당 클래스가 있는 디렉토리에 매핑 할 수 있음
'/app' 와 '/system' 디렉토리는 사용의 편의성을 위해 미리 매핑이 되어 있음
Autoload.php
* $psr4 = [
* 'CodeIgniter' => SYSTEMPATH,
* 'App' => APPPATH
* ];
CI4 에서는 namespace 를 반드시 디렉토리명 을 사용하여야 하며 대소문자는 구별 없음
해당 규칙을 지키지 않으면 에러가 발생
'CI4' 카테고리의 다른 글
[코드이그나이터] esc() 전역함수 (0) | 2020.08.28 |
---|---|
[코드이그나이터] 개발환경을 development 으로 변경하기 (0) | 2020.08.27 |
[코드이그나이터] URI 세그먼트 (0) | 2020.08.27 |
[코드이그나이터] 설치후 초기페이지 (0) | 2020.08.26 |
[코드이그나이터] composer로 설치하기 (0) | 2020.08.26 |