У меня есть полная система создания форм. Существует много разных типов вопросов, и я должен проверить правильность ответа, который сделал человек.
Все типы вопросов имеют свой собственный класс, который всегда называется ItemClass, и этот класс находится в собственном файле. Каждый раз, когда задается вопрос, я включаю файл, и есть проблема: я должен проверять разные типы Вопросов в одном PHP-файле. И затем появляется ошибка – ItemClass уже объявлен.
Есть ли способ отключить класс?
Хорошего дня!
Доминик http://img.ruphp.com/class/signature.png
Нет, невозможно «определить» существующий класс.
В вашем случае у вас не должно быть нескольких классов, все из которых имеют одинаковое имя: каждый класс должен иметь другое / различное имя, и вы должны изменить способ работы с ними, поэтому ваш код имеет дело с классами, не названными ItemClass
.
Например, вы могли бы:
ItemClass_Type1
в itemclass_type1.php
ItemClass_Type2
в itemclass_type2.php
и т. д. – и эти классы могли бы расширить один и тот же базовый класс, если это необходимо / если это имеет смысл.
(Некоторое время я думал, что, возможно, runkit может помочь с идеей «undefining a class», но, похоже, не существует функции для этого – и это расширение не совсем стабильно и не должно использоваться на производственный сервер)
Нет.
Как только класс декалирован, он не может быть «отменен»,
Может быть, пространства имен могут вам пригодиться?
Нет. У вас есть недостаток дизайна.
Вероятно, вы должны позволить набирать разные типы вопросов из одного абстрактного класса вопросов и / или (1) использовать заводскую модель или (2) использовать шаблон стратегии .
Я протестировал ваши решения, и, наконец, у меня появилась идея: я переименовал классы в каждый из ее типов (ynItemClass, markItemClass, …), и когда мне нужен элемент Item a,
$it = $item->item_type."ItemClass"; $test = new $it($smarty);
И это работает!
Хорошего дня! Dominik