не полоучается реализация автозагрузки

Духовность™

Продвинутый новичок
не полоучается реализация автозагрузки

Суть такова: функция __autoload на основе запрашиваеммого файла определяла его путь на жестком диске. Решил сделать статическое хранение путей к ранее запрашиваемым классам в пределе одного работы скрипта, что бы по нескольку раз одни и теже операции не делать... Не получается. Почему - понятия не имею!

PHP:
$autoload_data = array();

function __autoload($class_name)
{
    global $autoload_data;

    // если в хранилище путей к классам ещё нет информации о данном классе
    if (!isset($autoload_data[$class_name]))
    {
        echo "класс $class_name не существует в хранилище<br>";

        // ищем путь к файлу запрашиваемого класса
        if (preg_match(...))
        {
             // добавляем в хранилище информацию о пути к данному классу
            $autoload_data[$class_name] = 'путь';

            include_once($autoload_data[$class_name]);
        }
        // ...
    }
    else
    {
        echo "класс $class_name <strong>существует</strong> в хранилище<br>";
        
        // подключаем класс согласно информации из хранилища
        inclide($autoload_data[$class_name]);
    }
}
Пытаюсь проверить работоспособность:

PHP:
class test
{
    function __construct()
    {
        $a = new User_Model();
        $a2 = new User_Model();
    }
}

$test = new test();
получаю:

Код:
класс User_Model не существует
хотя ожидал:

Код:
класс User_Model не существует
класс User_Model существует
в чем моя ошибка??? :confused:
 

dimagolov

Новичок
в том, что после первого создания User_Model __autoload больше не пускается
 

Духовность™

Продвинутый новичок
cDLEON
опечатка в коде, но она тут не при чем

dimagolov
похоже на то.
Т.е. фактически PHP ужа сам позаботился о сохранении информции о подключаемом файле?
 

cDLEON

Онанист РНРСlub
Если класс не существует, вызывается автолоад, если же существует - вполне логично, что не вызывается.
 

dimagolov

Новичок
Т.е. фактически PHP ужа сам позаботился о сохранении информции о подключаемом файле?
сделав один раз include с нужным тебе классом ты УЖЕ его определил и следующие создания экземпляров будут юзать уже тот, определенный класс.
 

Духовность™

Продвинутый новичок
cDLEON
dimagolov
а... вот оно что... я туплю.

-~{}~ 01.02.10 20:30:

я просто как-то не подумал, что автолоад работает так же, как и все остальное.. Т.е. я думал, что вызов явно не подключенного класса полюбому приводит к вызову функции автолоад. гыгыг:D
 

Духовность™

Продвинутый новичок
nerezus
а ещё полезно уметь чинить машины и делать самому ремонт

вообще то я прочел, что там написано. мне все равно не понятно, чем одно от другого отличается. может объясните, вот что бы не пересказывая мануал, а на основе собственного опыта?
 

nerezus

Вселенский отказник
triumvirat починка машины не влияет на навык программирования на PHP.
А знание английского влияет, отсутствие его повлияло на то, что вы не можете прочитать ответ на элементарный вопрос по PHP.

Разниц а в том, что
> By contrast, __autoload() may only be defined once
автолоад определяется одна

> It effectively creates a queue of autoload functions
spl_autoload_register создает очередь автолоад-функций
 
Сверху