phpclass/객체정보2008. 8. 9. 12:36
작성: 2008.08.09
네임스페이스 다루기
임의의 네임스페이스 내에 있는 모든 심볼(클래스명, 함수명, 변수명, 상수명 등)은 네임스페이스_식별자::심볼과 같은 식으로 다루어집니다.
namespaced_idenfitier::symbol;
[code php;gutter:false] <?php namespace MyProject::Connection; function my_class() { /* code */ } ?> [/code]
< inc.php >
[code php;gutter:false] <?php require_once('inc.php'); $my = new MyProject::Connection::my_class(); ?> [/code]
use 연산자(use operator)
use namespaced_name as othername;
use 연산자를 사용하면 원래 네임스페이스 이름 대신에 별명으로 임포트(import)할 수 있기 때문에 긴 이름 대신에 더 짧은 이름을 사용할 수 있어 문서를 단순화 시킬 수 있습니다. 짧은 이름의 othername은 스크립트 문서가 실행될 때 원래의 이름인 namespaced_name으로 변환됩니다.
위의 예제에서 보았듯이 use 연산자를 사용하지 않을 경우에는 MyProject::Connection::my_class()와 같은 전체 이름으로 참조해야 합니다. 그러나 use 연산자를 사용할 경우에는 아래와 같이 Connection::my_class()와 같이 더 짧은 이름을 사용할 수 있습니다.
[code php;gutter:false] <?php require_once('inc.php'); use MyProject::Connection as Connection; $my = new Connection::my_class(); ?> [/code]
또한 use MyProject::Connection as Connection; 에서 Connection과 같이 동일한 이름의 별명을 사용할 경우에는 아래와 같이 as 이하의 구문을 생략할 수 있습니다.
[code php;gutter:false] <?php require_once('inc.php'); use MyProject::Connection; $my = new Connection::my_class(); ?> [/code]
use 연산자는 전역 범위(global scopr)에서만 사용할 수 있으며 함수 또는 클래스 내에서는 사용할 수 없습니다. use 연산자에 의해 임포트된 이름은 임포트된 부분부터 현재 파일의 끝까지 영향을 미칩니다.
상수 __NAMESPACE__(constants __NAMESPACE__)
컴파일-타임 상수인 __NAMESPACE__ 에는 현재 네임스페이스 이름을 가지고 있습니다. 네임스페이스를 벗어나면 빈문자열(empty string)을 값으로 할당됩니다. 따라서 전역 네임스페이스(global namespace)에서 __NAMESPACE__의 값은 빈문자열입니다.
[code php;gutter:false] <?php namespace A::B::C; function foo() { // do stuff } set_error_handler(__NAMESPACE__ . "::foo"); ?> [/code]
< 출처:php.net >

Posted by 방글24