2012-02-23 2 views
12

PHP 5.3에서 네임 스페이스에 대해 배우고 있는데 네임 스페이스 자동 로딩을 사용하고 싶습니다. 이 SplClassLoader class을 찾았지만 어떻게 작동하는지 알 수 없습니다.SplClassLoader로 PHP 자동 로딩?

system 
    - framework 
    - http 
     - request.php 
     - response.php 
index.php 
SplClassLoader.php 

가 어떻게 클래스 자동 로딩을 사용할 수 있습니까 :

이의 내가이 같은 디렉토리 구조를 가지고 있다고 가정 해 봅시다? request.phpresponse.php에는 어떤 네임 스페이스가 있어야합니까?

namespace framework\http; 

class Request 
{ 
    public function __construct() 
    { 
     echo __CLASS__ . " constructer!"; 
    } 
} 

그리고 이것은 response.php입니다 :

request.php입니다

namespace framework\http; 

class Request 
{    
    public function __construct() 
    {  
     echo __CLASS__ . " constructed!";     
    }   
} 

그리고 index.php에서 내가 가진 :

require_once("SplClassLoader.php"); 
$loader = new SplClassLoader('framework\http', 'system/framework'); 
$loader->register(); 

$r = new Request(); 

내가이 오류 메시지가 :

Fatal error: Class 'Request' not found in C:\wamp\apache\htdocs\php_autoloading\index.php on line 8 

왜 작동하지 않습니까? 내 프로젝트에서 SplClassLoader을 사용하여 클래스를로드/필요하게하고 폴더와 네임 스페이스를 어떻게 설정하고 이름을 지정해야합니까?

+0

파일 및 디렉토리 이름이 대문자로 시작해야 할 수도 있습니다. –

+0

@Adrian Macneil : 창문에는 없지만 네가 맞아. 이걸 만들어야 해. – hakre

답변

11

파일 및 디렉토리 이름은 다음 예에서와 같이 정확히 클래스와 네임 스페이스의 경우 일치 할 필요는 다음 SplClassLoader 객체를 등록 할 때

system 
    - framework 
    - http 
     - Request.php 
     - Response.php 
index.php 
SplClassLoader.php 

는 또한, 당신은 단지 루트 네임 스페이스를 선언해야, 다음과 같이 입력하십시오 :

<?php 

    require_once("SplClassLoader.php"); 
    $loader = new SplClassLoader('framework', 'system/framework'); 
    $loader->register(); 

    use framework\http\Request; 

    $r = new Request(); 

?> 

희망이 있습니다.

+3

뭔가를 놓치지 않으면'new request()'를 참조하기 전에'use framework \ http \ Request; '가 필요하다고 생각합니다. –

+0

@MarkFox 수정할 수정되었습니다. 헤즈 업에 감사드립니다. – rintaun