2011-05-13 89 views
0

我有最奇怪的問題。我有一個__autoload函數來處理我所有的類,包括。在我的代碼中的一個點上,即在new XLSReader()new CVSReader()之間,__autoload函數剛剛停止使用。因此我得到class CSVReader not found錯誤。這是__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功能已停止工作,因爲我手動包括CSVReader類,並上了隔壁班的那個應該是自動加載not found錯誤。

爲了說清楚,在上面的代碼片段之前,自動加載就像它應該那樣工作。此外,這裏是__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 2011-05-13 14:08:04

+0

在__autoload()函數中聲明$ classname。當涉及到CVSReader時,您似乎混淆了命名空間。 – 2011-05-13 14:12:23

回答

3

你可能會遇到使用__autoload()而不是spl_autoload_register()的黑暗水域?

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

它也可能是一個問題的情況下,或者你正在使用你的自動加載功能,非絕對文件路徑。

如果用__DIR__(或dirname(__FILE__))後,在前面加上$路徑,或任何需要在您的設置:

$path = __DIR__ . $path; 
+0

事實上,在'__autoload()'失敗的地方使用'spl_autoload_register()'成功了。感謝您的回答! – Hubro 2011-05-13 14:13:42