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 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *