2011-05-13 4 views
0

이상한 문제가 있습니다. 나는 내 모든 클래스를 처리하는 __autoload 함수를 가지고있다. 내 코드의 한 지점, 즉 new XLSReader()new CVSReader() 사이에서 __autoload 함수는 사용이 중지됩니다. 결과적으로 class CSVReader not found 오류가 발생합니다. 이것은 내가 수동으로 CSVReader 클래스를 포함하고 자동로드 된해야 다음 수업에 not found 오류를 가지고 있기 때문에 __autoload 기능, 작동이 중지되었습니다 알고 __autoload 정지가__autoload가 작동을 멈추는 이상한 문제

// Get general data 
printf("Fetching data from \"%s\"... ", $data_file); 
$csvreader = new \XLSReader($data_file, $columnsToFetch); 
$data = $csvreader->getData(); 
print("Done.\n"); 

// Get IP data 
print("Loading IP addresses... "); 
$csvreader = new \CSVReader($ip_file, null); 
$ip_data = $csvreader->getData(); 
print("Done.\n"); 

작업 코드입니다.

위의 코드 조각보다 먼저 자동 로딩이 제대로 작동하는지 확인하십시오. 또한 __autoload 함수는 다음과 같습니다.

// Autoload 
function __autoload($classname) 
{ 
    $classname = str_replace("\\", "/", $classname); 

    $path = "code/" . $classname . ".php"; 

    if(is_file($path)) 
    { 
     include($path); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

아이디어가 있습니까?

+0

파일'코드/CSVReader.php'가 존재합니까? * nix 기반 시스템은 대소 문자를 구분합니다 **. – Crozin

+0

__autoload() 함수에서 $ classname을 반향합니다. CVSReader에 관해서 네임 스페이스와 혼합되어있는 것처럼 보입니다. –

답변

3

spl_autoload_register() 대신 __autoload()을 사용하면 어두운 물이 흐를 가능성이 있습니까?

http://php.net/manual/en/function.spl-autoload-register.php

또한 경우 문제, 또는 당신이 당신의 자동로드 기능에서 사용하고있는 비 절대 파일 경로 일 수 있습니다.

__DIR__ (또는 dirname(__FILE__))와 후자 앞에 추가 $ 경로, 또는 설정에서 무엇이든 필요한 경우 :

$path = __DIR__ . $path; 
+0

실제로'__autoload()'가 실패한 곳에서'spl_autoload_register()'를 사용하여 성공했습니다. 귀하의 답변 주셔서 감사합니다! – Hubro