2010-07-10 14 views
0

J'ai une chose que je pensais devoir fonctionner, mais ce n'est pas le cas.PHP surcharger une fonction d'une classe parente

J'ai plusieurs classes Controller _ ##, elles s'étendent toutes à partir de Controller_Core. Chaque classe Controller _ ## - a une fonction publique Save(). Maintenant j'ai pensé que je veux effectuer une autre vérification générale (addslashes pour chaque $ _POST-var) et j'ai pensé que si j'ajoutais une fonction publique Save() à Controller_Core, elle serait exécutée par défaut car la classe ## . Cependant, ce n'est pas le cas.

Ma question; Est-ce possible ce que j'essaie d'accomplir? Ou est-ce que je me trompe en pensant que ça marcherait jamais?

Répondre

5

Appelez parent::Save() dans la version sous-classe de la méthode.

Voir http://php.net/manual/en/keyword.parent.php.

+0

il n'a pas être la première ligne, aussi '::' –

+0

"première ligne de la sous-classe" ne doit pas être le premier, mais doit être avec dans la fonction et non pas la classe – jigfox

+0

@Jens: pourquoi la première ligne, ne pouvons-nous remplacer une fonction et appel parent à tout moment de son exécution? –

1

Ou vous pouvez appliquer refactoring pour extraire un comportement commun à votre classe de base:

class Controller_Core { 

    public function save() { 
     if (! $this->_validateInfo()) { 

      return false; 
     } 

     return $this->_doSave(); 
    } 

    protected function _validateInput() { 
     //-- do stuff 

     return true; 
    } 

    protected function _doSave() { 
     //-- do stuff 

     return true; 
    } 

} 

Vous écrivez le code spécifique dans les classes d'enfants, comme dans:

class Controller_Extended extends Controller_Core { 

    protected function _doSave() { 

     //-- a new return 
     return true; 
    } 
}