2010-02-10 18 views
5

Ho un sistema di creazione di moduli completo. Ci sono molti diversi tipi di domande e devo verificare se la risposta che la persona ha fatto è corretta.Come posso "disinserire" una classe che è stata dichiarata

Tutti i tipi di domande hanno una propria classe, viene sempre chiamato ItemClass e questa classe si trova nel proprio file.

Ogni volta che viene posta una domanda, includo il file e c'è il problema: devo controllare diversi tipi di domande in un file PHP. E poi arriva l'errore - ItemClass già dichiarato.

Esiste un metodo per disinserire una classe?

risposta

0

ho provato le tue soluzioni e alla fine mi è venuta un'idea: ho rinominato le classi a ciascuna del suo tipo (ynItemClass, markItemClass, ...) e quando ho bisogno di un tipo di elemento di fatto la seguente

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

E funziona !!

Buona giornata! Dominik

4

No.

Una volta che una classe è decalred non può essere 'impostata'

Forse namespaces potrebbe essere utile a voi?

+0

Mhm, non sono sicuro di poterlo usare per il mio problema –

6

No, non è possibile "non definire" una classe esistente.

Nel tuo caso, non dovresti avere più classi che hanno tutti lo stesso nome: ogni classe dovrebbe avere un nome diverso/distinto, e dovresti modificare il modo in cui stai lavorando con quelle, quindi il tuo codice si occupa di classi non chiamato ItemClass.


Per esempio, si potrebbe avere:

  • ItemClass_Type1 in itemclass_type1.php
  • ItemClass_Type2 in itemclass_type2.php

e così via - e quelle classi potrebbe tutto estendere la stessa classe base, se necessario/se ha senso


(Per un po ', ho pensato che forse runkit potrebbe aiutare con l'idea "indefiniti una classe", ma non sembra essere una funzione per farlo - e che l'estensione non è abbastanza stabile e non deve essere utilizzato su un server di produzione)

1

No. Si dispone di un difetto di progettazione.
Probabilmente dovresti lasciare che il diverso tipo di domande erediti da una classe di domande astratta e/o (1) utilizzi lo strategy pattern.

Problemi correlati