Richiamare il “nonno” di una classe

Capita spesso in symfony, in cui l’ereditarietà è usata pesantemente, di dover sovrascrivere un metodo.
A volte purtroppo questo metodo è a sua volta un override di un metodo della propria classe padre, come nel seguente esempio:

1
2
3
4
5
6
// funzione originale
public function pippo()
{
  parent:pippo()
  // ecc. ecc.
}

Se siamo in un caso come questo e ci serve sovrascrivere la funzione pippo(), non possiamo ricorrere a parent::, perché richiamerebbe appunto la funzione che vogliamo aggirare. La soluzione è tanto semplice quanto efficace:

1
2
3
4
5
6
// nostra funzione di override
public function pippo()
{
  call_user_func(array(get_parent_class(get_parent_class($this)), 'pippo'));
  // ecc. ecc.
}

In questo modo possiamo richiamare direttamente il nonno della nostra classe, invece del padre 🙂

Pubblicato da Massimiliano Arione

web demiurge

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

phpDay - Maggio 2019 a Verona