Forum Webscript.Ru
Программирование => PHP => Тема начата: Aku Aku от 11 Апреля 2004, 18:16:20
-
в процессе работы скрипта, на основании данных в $_REQUEST нужно погрузить тот или иной класс. Делается это сейчас вот так:
$neededClassInstance = eval("return new ".$classDescriptor->className."(\\$param);");
есть ли способ сделать то же самое, но без eval-а? а то уж больно некрасиво получается
может есть какая либа/класс/whatever для динамической загрузки?
-
Aku Aku:
есть ли способ сделать то же самое, но без eval-а?
а почему не сделать это через if? =) или так не круто? =)
неужели такое огромное количество классов, что их нельзя через if или switch отработать?
-
я не уточнял зачем это нужно:
для фреймворка.
если делать через if то при добавлении нового модуля/действия нужно будет править класс контроллера, что не есть хорошо.
а через eval() действительно не круто =)
-
пример из 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 стоит собачка, но я ее обычно убираю)
-
да, то что надо. сенкс.
мог бы и сам догадаться в исходниках PEAR поискать :-)
-
хм. я тоже сначала подумал о переменных классах, но чтото в мануале не нашел такого раздела=(