Отменить класс

У меня есть полная система создания форм. Существует много разных типов вопросов, и я должен проверить правильность ответа, который сделал человек.

Все типы вопросов имеют свой собственный класс, который всегда называется ItemClass, и этот класс находится в собственном файле. Каждый раз, когда задается вопрос, я включаю файл, и есть проблема: я должен проверять разные типы Вопросов в одном PHP-файле. И затем появляется ошибка – ItemClass уже объявлен.

Есть ли способ отключить класс?

Хорошего дня!

Доминик http://img.ruphp.com/class/signature.png

Solutions Collecting From Web of "Отменить класс"

Нет, невозможно «определить» существующий класс.

В вашем случае у вас не должно быть нескольких классов, все из которых имеют одинаковое имя: каждый класс должен иметь другое / различное имя, и вы должны изменить способ работы с ними, поэтому ваш код имеет дело с классами, не названными 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