Странная проблема, когда __autoload перестает работать - PullRequest
0 голосов
/ 13 мая 2011

У меня самая странная проблема. У меня есть __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 Ответ

3 голосов
/ 13 мая 2011

Можете ли вы бежать в мутные воды, используя __autoload() вместо spl_autoload_register()?

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

Это также может быть проблема с регистром или не абсолютный путь к файлу, который вы используете в своей функции автозагрузки.

Если последнее, добавьте $ path с __DIR__ (или dirname(__FILE__)), или с тем, что требуется в вашей настройке:

$path = __DIR__ . $path; 
...