__autoload не выполняется в PHP - PullRequest
1 голос
/ 09 августа 2011

Итак, я пытаюсь загрузить классы в PHP; однако функция __autoload(), похоже, не выполняется. Даже когда я пытаюсь echo использовать переменную $class_name, я не вижу ничего, кроме вывода, который я предоставил ниже. Я включил все соответствующие файлы и удалил ненужные части этого. Согласно примечанию в PHP: классы автозагрузки - руководство , я не могу использовать __autoload() в CLI интерактивный режим , который я не использую. Любой указатель будет высоко ценится. Спасибо.

Вывод index.php:

Неустранимая ошибка : класс 'Календарь' не найден в / home1 / tylercro / public_html / cb-test / index.php в строке 3

index.php:

<?php
    require_once($_SERVER['INCLUDES'] . 'prep.php');
    $smarty -> assign('calendar', new Calendar());
?>

prep.php:

<?php
    error_reporting(-1);

    function __autoload($class_name) {
        include($_SERVER['CLASSES'] . $class_name . '.php');
    }
    require_once($_SERVER['SMARTY_BIN'] . 'Smarty.class.php');

    $smarty = new Smarty();
?>

.htaccess:

Options -Indexes

SetEnv CLASSES /home1/tylercro/public_html/cb-test/includes/classes/
SetEnv INCLUDES /home1/tylercro/public_html/cb-test/includes/
SetEnv SMARTY_BIN /home1/tylercro/smarty/

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

Этот пост решил мою проблему. Все, что мне нужно было сделать, это изменить prep.php на следующее:

<?php
    error_reporting(-1);

    function __autoload($class_name) {
        include($_SERVER['CLASSES'] . $class_name . '.php');
    }
    define('SMARTY_SPL_AUTOLOAD',1);
    require_once($_SERVER['SMARTY_BIN'] . 'Smarty.class.php');
    spl_autoload_register('__autoload');

    $smarty = new Smarty();
?>
4 голосов
/ 09 августа 2011

Smarty имеет собственную функцию автозагрузки, и она сталкивается с вашей. spl_autoload_register() может решить вашу проблему, так как он может зарегистрировать любую функцию в качестве автозагрузчика.

...