Как я могу “сбросить” класс, который был объявлен

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

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

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

Там какой-либо метод должен сбросить Класс?

6
задан slayernoah 5 March 2018 в 16:33
поделиться

4 ответа

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

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

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

Хорошего дня! Доминик

0
ответ дан 9 December 2019 в 22:34
поделиться

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

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


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

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

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


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

6
ответ дан 9 December 2019 в 22:34
поделиться

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

1
ответ дан 9 December 2019 в 22:34
поделиться

Одним из вариантов было бы

>>> var test = "Mar 16, 2010 00:00 AM";
>>> test.replace(test.substring(13,15),"12")
-121--2764416-

Я не думаю, что Windows делает что-то особенно умное (например, пытается переосмыслить поплавок в базе 10) здесь: я бы предположил, что это просто точное вычисление первых 17 значащих цифр (что дало бы «11.545000000000000»), а затем прикрепление дополнительных нулей в конце, чтобы составить

Как говорят другие, различные результаты для 0.125 получены от Windows, использующей округление наполовину вверх, и Linux, использующей округление наполовину четно.

Обратите внимание, что для Python 3.1 (и Python 2.7, когда он появляется) результат форматирования float будет независимым от платформы (за исключением, возможно, необычных платформ).

-121--4028662-

No.

Как только класс декалорирован, он не может быть «unset»

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

4
ответ дан 9 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: