phpclass/객체정보2008. 8. 9. 12:34
작성: 2008.08.09
네임스페이스의 정의
이 문서에서 기술된 모든 소스는 2008년 8월 6일자 php-5.3.0 알파2 개발버전(php5.3-win32-200808062030.zip)으로 테스트하였습니다.
네임스페이스의 정의는 namespace 키워드에 이어 네임스페이스 식별자(identifier)를 지정합니다.
namespace identifier;
스크립트 문서 단위로 이루어지는 네임스페이스
C++과 같은 다른 언어와 달리 php v5.3에서 제공하는 이름공간 기능은 스크립트 문서 단위로 이루어진다는 것입니다. 그리고 네임스페이스의 지정은 다른 실행코드에 앞서 정의되어야 합니다. 그렇지 않고 네임스페이스를 정의하기 전에 다른 실행코드가 문서에 나타나면 아래와 같은 에러를 발생시킵니다.
Fatal error: Namespace declaration statement has to be the very first statement in the script in test.php on line xx
A_SPACE와 B_SPACE 네임스페이스 각각에 존재하는 동일한 이름의 함수 my_function()가 어떻게 동작하는지에 대한 간단한 예를 살펴보겠습니다.
[code php;gutter:false] <?php namespace A_SPACE; function my_function() { print "A_SPACE에서 정의한 함수\n"; } ?> [/code]
< inc1.php >
[code php;gutter:false] <?php namespace B_SPACE; function my_function() { print "B_SPACE에서 정의한 함수\n"; } ?> [/code]
< inc2.php >
[code php;gutter:false] <?php require_once('inc1.php'); require_once('inc2.php'); A_SPACE::my_function(); B_SPACE::my_function(); ?> [/code]
< test.php >
test.php를 실행하게 되면 아래와 같은 결과를 얻을 수 있습니다.
A_SPACE에서 정의한 함수
B_SPACE에서 정의한 함수
여러 개의 파일이 동일한 네임스페이스를 사용하는 예
동일한 명칭의 네임스페이스를 여러 파일에서 사용할 수 있기 때문에 동일한 네임스페이스 내에서 여러 파일로 나누어 작업할 수 있습니다.
[code php;gutter:false] <?php namespace MyProject::Connection; const NS_CONST = 'namespace constant NS_CONST'; class my_class { const MY_CONST = 'my_class::MY_CONST'; public static $public_var = "my_class::public_var"; public function my_function() { print "my_class::my_function()\n"; } } function my_function() { print "namespace function my_function()\n"; } ?> [/code]
< inc1.php >
[code php;gutter:false] <?php namespace MyProject::Connection; class my_class2 extends my_class { public function my_function() { my_class::my_function(); print "my_class2::my_function()\n"; } } ?> [/code]
< inc2.php >
[code php;gutter:false] <?php require_once('inc1.php'); require_once('inc2.php'); print MyProject::Connection::NS_CONST . "\n"; MyProject::Connection::my_function(); print MyProject::Connection::my_class2::MY_CONST . "\n"; print MyProject::Connection::my_class2::$public_var . "\n"; MyProject::Connection::my_class2::my_function(); ?> [/code]
< test.php >
test.php를 실행하게 되면 아래와 같은 결과를 얻을 수 있습니다.
[code php;gutter:false] namespace constant NS_CONST namespace function my_function() my_class::MY_CONST my_class::public_var my_class::my_function() my_class2::my_function() [/code]

Posted by 방글24