Странность автозагрузки PHP - PullRequest
0 голосов
/ 02 мая 2011
function __autoload($class_name) {
    echo("Attempting autoload ");
    if (substr($class_name, -6) == "Mapper") {
        $file = 'mappers/'.$class_name.'.php';
        echo "Will autoload $file ";
        include_once($file);
    }
}
__autoload("UserMapper");
$user = new UserMapper($adapter);

die("done");

Результат: Попытка автозагрузки Будет автоматически загружаться mappers / UserMapper.php сделано

function __autoload($class_name) {
    echo("Attempting autoload ");
    if (substr($class_name, -6) == "Mapper") {
        $file = 'mappers/'.$class_name.'.php';
        echo "Will autoload $file ";
        include_once($file);
    }
}
//__autoload("UserMapper");
$user = new UserMapper($adapter);

die("done");

(Я только что прокомментировал ручной вызов __autoload () ...)

Результат: Неустранимая ошибка: класс 'UserMapper' не найден в C: \ Program Files \ EasyPHP-5.3.5.0 \ www \ proj \ 29letters \login.php на линии 13

Есть идеи?И да, я использую PHP 5.3.5

Ответы [ 2 ]

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

Не уверен, почему ваш пример не работает, как и должно быть в соответствии с руководством.

Вы пытались использовать spl_autoload_register для регистрации функции автозагрузчика?

0 голосов
/ 02 мая 2011

Вы правильно установили include_path?Вы используете относительный путь для включения файла класса.Вместо этого попробуйте абсолютный путь.

$dir  = __DIR__ . '/../path/to/mappers';
$file = $dir . '/' . $class_name . '.php';
require $file;

или

// do this outside of __autoload
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/../path/to/mappers';

// inside __autoload
$file = $class_name . '.php';
require $file;
...