Considera una classe che stampa una tabella "schema" per una particolare linea di prodotti. Supponiamo di avere diversi, A, B, C, D. Il meccanismo della generazione della tabella è lo stesso, ma i dati sono diversi. Potrei creare una classe "base" chiamata OutlineTableGenerator
e una classe per ogni linea di prodotti che estendono quella classe base. Posso mettere i getter di dati in classi di prodotto individuali e lasciare che la classe di base funzioni sui dati. Osserva di seguito:
class OutlineTableGenerator
{
protected $vars;
function __construct($vars)
{
$this->vars = $vars;
}
public function getOutlineTable()
{
$data = $this->getOutlineTableData(); //my question is about this line
}
}
e
class OutlineTableGeneratorForProductA extends OutlineTableGenerator
{
function __construct($vars)
{
parent::__construct($vars);
}
protected function getOutlineTableData()
{
return ['data' => $this->vars['stuff']];
}
}
Visualizza la riga $data = $this->getOutlineTableData();
. Il mio problema con questa linea è che il mio IDE, e nessun altro IDE per quella materia, sarà in grado di capire quale classe & funzione che risolverà in fase di esecuzione. Uso abbastanza spesso una funzione per saltare dalla riga nel codice in cui viene chiamata una funzione, alla dichiarazione della funzione effettiva. In questo caso, l'utilizzo di quella funzione sulla linea in questione non salterà alla dichiarazione delle funzioni. Perché ci sono molti di questi, e nemmeno IDE, né il linguaggio di programmazione stesso sa quale funzione voglio. Penso che questo sia male.
C'è un work-around? Questo è un inconveniente del polimorfismo in OO? Come vivi con esso?