[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не работает __autoload()
alex12060
В общем, в моем кернеле не пахает функция автоподгрузки класса.
Вот ее код:


/**
*
@class kernel
*
@method protect
*
@type static
*
@visible public
*
@arg none
*
@return ''
*
* Этот метод обеспечивает защиту от подделки разных
* заголовков, при помощи CURL'a
*/


public static function protect() {
if (isset($_SERVER['QUERY_STRING']) && strpos(urldecode($_SERVER['QUERY_STRING']), chr(0)) !== false) die();

$targets= array('PHP_SELF', 'HTTP_USER_AGENT', 'HTTP_REFERER', 'QUERY_STRING');
foreach ($targets as $target) {
$_SERVER[$target] = isset($_SERVER[$target]) ? htmlspecialchars($_SERVER[$target], ENT_QUOTES) : null;
}

return;
}

function __autoload($class) {
require_once (HOSTROOT.'/controller/modules/'.$class.'/'.$class.'.class.php');

}

function __construct() {
$this->parseCFG();

parent::__construct(AL_HOST, AL_USER, AL_PASSW, AL_DB);

}


HOSTROOT.'/controller/modules/'.$class.'/'.$class.'.class.php


Здесь все работает достойно, с помощью дебага проверял путь, он верный. Даже tail вывел мне последние 10 строк кода.
Но при вызове этого кода:


protected function smartyInit() {
$this->TmpLoad = new Smarty;
$conf = $this->parseCFG(true, 'smarty.ini');

return $this->TmpLoad;
}

public function debug() {
var_dump($this->smartyInit());
}


Выводит ошибку -
[Wed Jul 20 15:00:02 2011] [error] [client 127.0.0.1] PHP Fatal error:  Class 'Smarty' not found in /usr/local/www/apache22/data/test.ru/alex12060/model/kernel.class.php on line 275


В чем может быть подвох?



Спустя 16 минут, 29 секунд (20.07.2011 - 14:25) Winston написал(а):
Цитата (alex12060 @ 20.07.2011 - 14:08)
SITEROOT.'/controller/modules/'.$class.'/'.$class.'.class.php


А у тебя есть такой файл ?
SITEROOT.'/controller/modules/Smarty/Smarty.class.php

Спустя 1 минута, 30 секунд (20.07.2011 - 14:26) alex12060 написал(а):
PHPprogrammer

Цитата
Здесь все работает достойно, с помощью дебага проверял путь, он верный. Даже tail вывел мне последние 10 строк кода.


Спустя 4 минуты, 51 секунда (20.07.2011 - 14:31) Winston написал(а):
Цитата (alex12060 @ 20.07.2011 - 14:08)
kernel.class.php

Ты в этом файле создаешь объект, но из-за того, что класс Smarty не подключен выводится ошибка верно ?

Спустя 2 минуты, 30 секунд (20.07.2011 - 14:34) alex12060 написал(а):
PHPprogrammer

Да, я хочу создать экземпляр класса Smarty в свойство $TmpLoad. Но файл сам физически не подключен в класс.

Спустя 11 минут, 37 секунд (20.07.2011 - 14:45) Winston написал(а):
Я в этих делах не силен...
Я так понял, что ты autoload прям в классе прописываешь верно ?
Может стоить попробовать spl_autoload_register? huh.gif

Спустя 2 минуты, 10 секунд (20.07.2011 - 14:48) alex12060 написал(а):
PHPprogrammer

Ну да, ладно, я попробую сделать по другому чуточку, статичную функцию. У меня хостер просто не поддерживает spl вроде...(

Если проблема исчезнет, попробую отписаться сюда.

Спустя 1 час, 40 минут, 2 секунды (20.07.2011 - 16:28) mzcoding написал(а):
Имя класса должно совпадать с именем файла.

Спустя 3 часа, 40 минут, 9 секунд (20.07.2011 - 20:08) alex12060 написал(а):
mzcoding

...

Спустя 9 минут, 36 секунд (20.07.2011 - 20:17) neadekvat написал(а):
А че, __autoload можно пихать в класс? оО А зачем?

Спустя 1 час, 14 секунд (20.07.2011 - 21:18) alex12060 написал(а):
neadekvat

Я уже понял, что это была бредовая задумка smile.gif

Спустя 11 дней, 11 часов, 59 минут, 31 секунда (1.08.2011 - 09:17) linker написал(а):
Если __autoload() пихается в класс или переименовывается my_autoload(), то необходимо использовать spl_autoload_register() иначе данную функцию необходимо использовать так, как это описано в мануале php.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.