2010-02-10 24 views
5

Tengo un sistema completo de creación de formularios. Hay muchos tipos de preguntas diferentes y tengo que verificar si la respuesta que la persona hizo es correcta.¿Cómo puedo "desarmar" una clase que ha sido declarada

Todo tipo de preguntas tiene su propia clase siempre se llama ItemClass y esta clase está en su propio archivo.

Cada vez que se formula una pregunta, incluyo el archivo y surge el problema: tengo que verificar diferentes tipos de preguntas en un archivo PHP. Y luego viene el error - ItemClass ya declarado.

¿Hay algún método para desarmar una clase?

Respuesta

0

Probé sus soluciones y, finalmente, tengo una idea: Retitulé las clases a cada uno de su tipo (ynItemClass, markItemClass, ...) y cuando necesito un elemento de tipo de un formuló la siguiente

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

¡Y funciona!

¡Que tengas un buen día! Dominik

4

Una vez que una clase se decalred no puede ser 'desarmar'

Tal namespaces podría ser de utilidad para usted?

+0

Mhm No estoy seguro de que pueda usar eso para mi problema –

6

No, no es posible "indefinir" una clase existente.

En su caso, no debe tener varias clases que tienen el mismo nombre: cada clase debe tener un nombre diferente/distinto, y debe modificar la forma en que está trabajando con ellos, por lo que su código trata con clases no llamado ItemClass.


Por ejemplo, usted podría tener:

  • ItemClass_Type1 en itemclass_type1.php
  • ItemClass_Type2 en itemclass_type2.php

y así sucesivamente - y todas esas clases podría extender la misma clase base, si es necesario/si tiene sentido.


(Durante un tiempo, pensé que tal vez podría ayudar runkit con la idea de "undefining una clase", pero no parece ser una función de hacer eso - y que la extensión no es bastante estable y no debe usarse en un servidor de producción)

1

No. Tiene un error de diseño.
Probablemente debiste haber heredado el tipo diferente de preguntas de una clase de pregunta abstracta y/o (1) usar el factory pattern o (2) usar el strategy pattern.

Cuestiones relacionadas