class $name как правильно задать имя класса?

Userpic

Новичок
class $name как правильно задать имя класса?

Доброго времени суток.

Как можно, не используя фабрики, задать динамически имя класса?

PHP:
$name= 'news';
class $name extend bar {} # вот тут не пойму как сделать
new $name();
Спасибо.
 

Necromant

Новичок
PHP:
class bar {
	function go() {
		echo "go";
	}	
}
$name="news";
eval("class $name extends bar {}");
$n = new $name;
$n->go();
 

SiMM

Новичок
Может кто-нибудь из деятелей объяснит, зачем создавать классы динамически?
 

Gorynych

Посетитель PHP-Клуба
StUV

вообще (я не знаю, что пытаются сделать в данном случае) динамическое создание классов актуально для систем с объектно-ориентированным представлением данных.

в таком случае добавление нового типа данных с систему, в том числе, означает добавление соответствующего класса (описания класса). Правда я сталкивался только с реализациями, где сначала порождается описание класса, а объекты могут порождаться только при следующей итерации, когда описание класса уже создано (может быть получено).
 

StUV

Rotaredom
Gorynych
это ничего не объясняет в любом общем случае

я сталкивался с этим в проекте на с++
создавались файлы конфигурации, заполняемые по определенному формату
перловый скрипт эти файлы парсил и создавал .h/.cpp файлы, с классами определенными по заданному формату + эти файлы автоматически включались в проект (причем любая правка в этих файлах не допускалась - в случае изменений, они перегенерялись заново)
таким образом достигалась некоторая безопасность организации кода (за счет заведомой единообразности интерфейса).

Подход красивый, но при включении в проект нового человека приходилось некоторое время "вводить его в курс дела" и обучать дополнительному синтаксисы файлов конфигурации
как правило первое время что-нить забывалось и перловый скрипт создавал "глючные классы"....

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

crocodile2u

http://vbolshov.org.ru
Подход, Necromant'а применяется в Simpletest для создания Mock'ов. Честно говоря, другого нормального применения такой конструкции я не могу себе даже представить.

Вместе с тем, автогенерация кода - это само по себе может быть очень даже хорошо (по-моему). Но уж никак не с помощью eval().
 

Userpic

Новичок
Спасибо всем за ответ.
Суть проблемы была в том что бы создать подобный модуль (к примеру есть модуль новости и добавить еще горячие новости) отредактировав в confige только имя класса.
 

SiMM

Новичок
Ну и нафига, спрашивается, для этого изъ..враты типа
PHP:
eval("class $name extends bar {}");
? Класс-то не генерируется, он уже существует, максимум - это сделать что-то типа
PHP:
include_once $name;
 

whirlwind

TDD infected, paranoid
Что бы понять зачем вам это нужно, проведите паралели с реальной жизнью. Если человека нанимают на работу, то подразумевают что у него 2 руки, 2 ноги, 1 голова (не обязательно) и он может выполнить определенную работу. Это означает что работатадель знает, с каким типом ему придется работать. Работадателя не интересуют типы, которых он не знает, т.к. он не знает ничего об их поведении и т.п. В программировании то же самое. Зачем вам типы (классы) о которых вы ничего не знаете? Какой смысл от пятой руки, если никто о ней не знает? Вам нужны не классы, а экземпляры или определенное поведение. А это реализуется конкретным классом, а не "неизвестным". "Имя класса" в вашем случае есть ничто иное, как атрибут конкретного класса.
 

die_hard

Новичок
SiMM прав. тем более в $name внутри евала может лежать теор. любая кака. и тогда можно проблем насобирать полный рот.
 
Сверху