2014-04-16 2 views
1

실제로 제 질문은 매우 간단합니다. PHP에서는 require 또는 include로로드 될 파일에 네임 스페이스를 정의 할 수 있습니다. 예 :이 코드를 실행하면 index.php에의PHP 네임 스페이스는 include 나 require 후에 변경되지 않습니다.

내용

namespace test; 
require('example.php'); 
die(__NAMESPACE__); 

example.php의 내용

namespace example; 
echo "hello world"; 

, 출력 때문에 네임 스페이스는하지 않습니다, "테스트"입니다 다른 네임 스페이스가있는 파일을 포함하면 변경됩니다.

하지만 그 이유를 말해 줄 수 있습니까? 파서를 어떻게 상상할 수 있습니까? 그것은처럼 보일 수 : PHP 파일에서

namespace test{} 
namespace example{} 
// and here it goes on with test, but why I didn´t said namespace test 
namespace test{} 
+0

가능한 여러 파일 및 네임 스페이스 범위 (http://stackoverflow.com/questions/15239845/multiple-files-and-namespaces-scope) –

답변

0

하는 namespace 선언 후 모든 코드는 해당 네임 스페이스에 속하는 것입니다. 여기에는 require 문이 포함됩니다.

각 PHP 파일에는 그 자체의 값이 __NAMESPACE__이고 namespace이 선언 될 때 채워집니다. 다른 파일의 네임 스페이스에 액세스하려면 __NAMESPACE__을 반환하는 example.php에 메서드를 만들 수 있습니다. this question을 참조하십시오.

get_current_namespaces()을 사용할 수도 있지만 어떤 네임 스페이스가 어떤 파일에 속해 있는지 알려주지는 않습니다.

+0

Thx. 하지만 왜 다음 네임 스페이스에 영향을 미치지 않아도됩니까? require는 현재 페이지에 페이지를로드하므로 모두 하나의 파일이됩니다. 수동으로이 작업을 수행하면 작동 할 수도 있습니다. – user3292653

+0

PHP 인터프리터는 많은 파일이 하나 인 것처럼 행동하지만 논리적으로 분리되어 있습니다 (적절하게는 네임 스페이스로). 'include' 문은 다른 파일에 속한 함수 등을 인식하도록 통역사에게 알려주지 만, 다른 메쏘드에 속할 수도 있지만'__NAMESPACE__'는 파일의 네임 스페이스에만 관련이 있습니다 참조. – Roberto

관련 문제