Автор Тема: Динамическая загрузка класса. Как без eval()?  (Прочитано 3875 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Aku Aku

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
в процессе работы скрипта, на основании данных в $_REQUEST нужно погрузить тот или иной класс. Делается это сейчас вот так:


$neededClassInstance 
= eval("return new ".$classDescriptor->className."(\\$param);");


есть ли способ сделать то же самое, но без eval-а? а то уж больно некрасиво получается
может есть какая либа/класс/whatever для динамической загрузки?

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Динамическая загрузка класса. Как без eval()?
« Ответ #1 : 11 Апреля 2004, 20:45:21 »
Цитировать
Aku Aku:
есть ли способ сделать то же самое, но без eval-а?

а почему не сделать это через if? =) или так не круто? =)
неужели такое огромное количество классов, что их нельзя через if или switch отработать?
ну, будем исповедоваться?

Оффлайн Aku Aku

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Динамическая загрузка класса. Как без eval()?
« Ответ #2 : 11 Апреля 2004, 20:54:13 »
я  не уточнял зачем это нужно:
для фреймворка.
если делать через if то при добавлении нового модуля/действия нужно будет править класс контроллера, что не есть хорошо.
а через eval() действительно не круто =)
« Последнее редактирование: 11 Апреля 2004, 21:00:30 от Aku Aku »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Динамическая загрузка класса. Как без eval()?
« Ответ #3 : 12 Апреля 2004, 12:29:28 »
пример из PEAR::Mail:

        $driver 
strtolower($driver);
        include_once \
'Mail/\' . $driver . \'.php\';
        $class = \'Mail_\' . $driver;
        if (class_exists($class)) {
            return new $class($params);
        } else {
            return PEAR::raiseError(\'Unable to find class for driver \' . $driver);
        }

(в оригинале перед include_once стоит собачка, но я ее обычно убираю)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Aku Aku

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 47
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Динамическая загрузка класса. Как без eval()?
« Ответ #4 : 12 Апреля 2004, 12:36:38 »
да, то что надо. сенкс.
мог бы и сам догадаться в исходниках PEAR поискать :-)

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Динамическая загрузка класса. Как без eval()?
« Ответ #5 : 12 Апреля 2004, 12:47:48 »
хм. я тоже сначала подумал о переменных классах, но чтото в мануале не нашел такого раздела=(
ну, будем исповедоваться?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28