Как я могу "сбросить" класс, который был объявлен - PullRequest
6 голосов
/ 10 февраля 2010

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

У всех типов Вопросов есть свой собственный класс, воля всегда называется ItemClass, и этот Класс находится в своем собственном Файле.

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

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

Ответы [ 4 ]

6 голосов
/ 10 февраля 2010

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

В вашем случае у вас не должно быть нескольких классов с одинаковыми именами: у каждого класса должно быть свое / отличное имя, и вы должны изменить способ работы с ними, чтобы ваш код работал с классами, не названными ItemClass.


Например, вы можете иметь:

  • ItemClass_Type1 в itemclass_type1.php
  • ItemClass_Type2 в itemclass_type2.php

и так далее - и все эти классы могут расширять один и тот же базовый класс, если это необходимо / если это имеет смысл.


(Некоторое время я думал, что, может быть, runkit может помочь с идеей "undefining a class"; но, похоже, функции для этого не существует - и это расширение не совсем стабильный и не должен использоваться на рабочем сервере)

4 голосов
/ 10 февраля 2010

номер

После того, как класс объявлен, он не может быть 'unset'

Может быть, пространства имен могут быть вам полезны?

1 голос
/ 10 февраля 2010

Нет. У вас есть недостаток дизайна.
Вероятно, вы должны были позволить другому типу вопросов наследовать от одного абстрактного класса вопросов и / или (1) использовать шаблон фабрики или (2) использовать шаблон стратегии .

0 голосов
/ 17 февраля 2010

Я проверил ваши решения и наконец получил идею: Я переименовал классы в каждый из его типов (ynItemClass, markItemClass, ...) и, когда мне нужен тип элемента, сделал следующее

$it = $item->item_type."ItemClass";
$test = new $it($smarty);

И это работает !!

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...