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?