__autoload停止工作的奇怪问题

时间:2011-05-13 14:03:27

标签: php autoload

我遇到了最棘手的问题。我有一个__autoload函数来处理我的所有类,包括。在我的代码中的某一点,即new XLSReader()new CVSReader()之间,__autoload函数停止使用。因此我收到class CSVReader not found错误。这是__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;
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你可能会遇到使用__autoload()代替spl_autoload_register()的阴暗水域吗?

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

它可能也是一个案例问题,或者您在自动加载功能中使用的非绝对文件路径。

如果是后者,请使用__DIR__(或dirname(__FILE__))或您设置中需要的任何内容添加$ path:

$path = __DIR__ . $path;