Включение smarty в php __autoload дает класс 'Smarty_Internal_Template', не найденный - PullRequest
0 голосов
/ 29 марта 2011

У меня есть функция автозагрузки, подобная этой:

function __autoload($class)
{
    //define('DOCROOT', dirname(__FILE__));

    $filename = "../sys/class/class." . strtolower($class) . ".inc.php";
    //$filename = DOCROOT . "/sys/class/class." . strtolower($class) . ".inc.php";

    if ( file_exists($filename) )
    {
            include_once $filename;
    }

}

Я переименовал файл smarty в class.smarty.inc.php, поэтому он включен в автозагрузку, но я получаю эту ошибку:

Fatal error: Class 'Smarty_Internal_Template' not found in /var/www/v3/sys/class/class.smarty.inc.php on line 441 

Не знаю, что это значит ..

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Делать НЕ изменять сторонние библиотеки.Просто создайте второй автозагрузчик, который следует соглашению об именах Smarty.

function defaultAutoloader($className) {
    // your code ($file = /path/to/my/lib/{{ CLASS }}.inc.php)

    if (file_exists($file)) {
        require $file;
        return true;
    }

    return false;
}

function smartyAutoloader($className) {
    // code ($file = /path/to/smarty/{{ CLASS }}.php)

    if (file_exists($file)) {
        require $file;
        return true;
    }

    return false;
}

spl_autoload_register('defaultAutoloader');
spl_autoload_register('smartyAutoloader');
0 голосов
/ 29 марта 2011

То, как ваш автозагрузчик сопоставляет имя класса с именем файла, приводит к имени файла class.smarty_internal_template.inc.php, которое, очевидно, не соответствует ожидаемому имени файла. Я не знаю, как устроен Smarty, но вы должны убедиться, что автозагрузчик может найти любой из его классов.

...