2013-07-07 3 views
3

그것은 자동 로딩을 사용하여 내 처음하지만 난 내 수업을 말하는 오류를 찾을 수 없습니다 점점 ​​계속 :PHP의 자동 로딩 클래스

Fatal error: Class 'Classes\Sunrise\DB' not found in my\sample\path\.sunrise.app\init.php on line 52 

편집 : 나는 DB에서 정적 방법을 사용하는 경우 라인 (52)은 수업. 어떤 이유로 PHP는 DB 클래스를 찾을 수 없다고 말합니다.

내 구조 :

order (Folder) 
    + index.php 
.sunrise.app 
    + init.php 
    + ordersetup.php 
    + Classes (Folder) 
     + Sunrise (Folder) 
      + DB.php 

파일 init.php 내 오토로더를 포함하고 차례로 나는 DB 클래스를 사용할 필요가 있지만, 충족하고있는 파일 .sunrise.app/init.php에서 include_once '../.sunrise.app/ordersetup.php';order/index.php에 포함되어있는 파일 ordersetup.php에 포함되어 있습니다 위에 표시된 오류와 함께. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

.sunrise.app/init.php에서 내 자동 로더 :

function my_autoload($class_name) { 
    include $class_name. '.php'; 
} 
spl_autoload_register('my_autoload'); 

내 DB 클래스 classes/Sunrise/DB.php의 :

<?php namespace Classes\Sunrise; 

use PDO; 

class DB { ... } 

편집 : seperators이 \을하기 때문에 폴더 Sunrise는 폴더 아래에 Classes

+0

네임 스페이스에서는 클래스를 사용하지만 폴더 계층에서는 클래스를 사용합니다. 이것은 리눅스 시스템인가? 올바른 케이스에주의하십시오. 파일이 없으면 치명적인 오류를 발생시키기 위해 include 대신에 require를 사용하십시오. – apartridge

+0

실수로'classes' 폴더는'Classes'입니다. 대문자입니다. – enchance

+0

당신의'use PDO' 문은'Classes \ Sunrise' 네임 스페이스에서'PDO'라는 클래스의 오토로더를 호출 할 것입니다. 글로벌 네임 스페이스에서'PDO'를 원한다면,'use \ PDO'라고 써야합니다.'\'는 글로벌 네임 스페이스를 참조합니다. –

답변

1

입니다 당신은 그들을 대체해야합니다. 이것은 리눅스 운영 체제가 다음 경우 OS에 대한 올바른 디렉토리 구분자로, 그들은 리눅스 시스템은 클래스의 경우 폴더의 경우와 일치해야합니다 또한 경우 리눅스는 경우이기 때문에 /

function my_autoload($class_name) { 
    $class_name = str_replace("\\","/",$class_name); 
    require "../.sunrise.app/".$class_name. '.php'; //you have to use path relative to 
                // order or use a absolute path 
                // /var/www/.sunrise.app/ 
} 

을 할 필요가 sensitive

+0

죄송합니다. 오토로더에 추가했는데 작동하지 않았습니다. 필자가 오토로더를 주석 처리하고 오래된 (곧 depracated 될)'function __autoload ($ class_name) {require $ class_name을 사용하면 이것은 흥미 롭습니다. '.php'; }'내'init.php' 파일에서 오류가 사라지고 내 페이지가로드됩니다. 하지만 나는 그걸 사용하고 싶지 않습니다. – enchance

+0

@incluence는 리눅스 시스템에서 잘 작동하지만'if' 절을 포함하고 있습니까? 그렇다면 시스템이 무엇인지에 따라 true 또는 false로 설정합니까? –

+0

'if' 절이 있어도 여전히 실패합니다. 현재 폴더 구조로, 어떻게 할 것입니까? – enchance