Sto scrivendo un'interfaccia database in PHP e ho una classe base dbTables
, oltre a una classe base dbTableFields
.
dbTables
ha una funzione, getFields()
, che crea un'istanza di dbTableFields
oggetti, ognuno dei quali contiene dati essenziali su ogni campo della tabella e lo inserisce in dbTableFields->fields=array();
dbTables
ha diversi figli.
Ora mi sono reso conto che i bambini devono utilizzare diverse versioni di getFields()
. Ma differiscono solo in un punto: hanno bisogno di istanziare dbTableFields
figli, invece che dbTableFields
oggetti.
Ho risolto questo problema. Ho approfittato della capacità di PHP di usare le variabili per rappresentare i nomi delle classi. Tutto quello che dovevo fare era, in dbTables->getFields()
sostituire:
$this->fields = new dbTableFields();
con
$this->fields = new self::$field_model();
Dove self::$field_model = 'dbTableFields'; // string value for class
Ora, nelle classi figlie, devo semplicemente sovrascrivere la proprietà $field_model
con il nome del% discendente appropriato di% deoenti.
Questo schema di ereditarietà parallela è una buona forma? O sto creando un pasticcio senza compromessi? Esiste un altro metodo più elegante e più manutenibile per ottenere lo stesso effetto?