2010-07-23 4 views
4

나는 PHP 네임 스페이스에 대해 거의 배우면서 간단한 오토로드 기능을 만들기 시작했다. 무엇 O 한 일은이었다 : 나는 어떤 앨리어싱을 사용하지 않거나 오기 문이 예 경우간단한 PHP 오토로더에 관한 질문

function __autoload($name) { 
    echo $name . "<br />"; 
    require_once $name . ".php"; 
} 

그래서,이 작동합니다. use MainNamespace\Subnamespace 때문에 나는 내가 가진 가정 것을 한 경우 : 자동로드에서 $nameGreatApp\Models\User 그렇게 GreatApp\Models\User.php이 발견되기 때문에 작동

new GreatApp\Models\User(); 

:

\GreatApp\Models\User.php 
\GreatApp\Models\Project.php 
\GreatApp\Util\Util.php 
\GreatApp\Util\Test\Test.php 

내가하려고하면. 하지만 수행 할 때

use GreatApp\Models; 
new User(); 

지금 $name 그냥 UserUser.php 찾을 수 없습니다 때문에 실패. 그럼 어떻게 자동 로딩을 설정해야합니까?

+0

대신 __autoload 기능의 spl_autoload_register 사용해야 주 (루트) 네임 스페이스에 속해야합니다. – Macmade

답변

1

네임 스페이스를 가져오고 클래스를 참조하는 방법에 관계없이 전체 네임 스페이스 경로는 항상 자동 로더에 전달됩니다. 그것은 작동해야합니다.

그냥 __autoload 기능 자체는

+0

네임 스페이스가 어떻게 작동하는지 PHP 문서를 읽으십시오. "Test \ Test"를 사용하여 클래스를 참조하려고하면 실제로 \ current-namespace \ Test \ Test를 참조합니다. current-namespace는 참조하는 파일의 네임 스페이스입니다. "use"는 현재 네임 스페이스를 변경하지 않습니다. 현재 네임 스페이스 내에서 사용할 다른 네임 스페이스를 가져옵니다. 네임 스페이스에 대한 이해를 돕기 위해 –

+0

이 링크를 따르십시오. http://www.sitepoint.com/php-53-namespaces-basics/ –