IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] PHP et héritages


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [POO] PHP et héritages
    Bonjour,

    Je suis actuellement en train de developper de nouveaux modules pour l'application d'eCommerce MAGENTO.

    Durant mes développements, j'ai créer une nouvelle classe (XyzCorp_Adminhtml_Block_Catalog_Product_Grid), qui hérite de Mage_Adminhtml_Block_Catalog_Product_Grid.

    La classe parente Mage_Adminhtml_Block_Catalog_Product_Grid contient une méthode _prepareColumns(). Dans ma classe, j'ai créer cette méthode dans le but de modifier son comportement : j'ai donc créé la même méthode _prepareColumns().

    Quand j'execute mon code, ce n'est pas la méthode de ma classe "enfant" mais celle du "parent" qui est exécutée. Si je supprime la méthode de ma classe parente, là j'ai bien le résultat attendu.

    Cela fonctionne bien, mais je ne peux pas garder cette solution, car pour éviter les problèmes lors de mise à jour de l'application, je ne peux toucher à aucune classe parente.

    Y a t'il un moyen de spécifier lors de la déclaration de ma méthode qu'elle doit "écraser" celle qui existe déjà ?

    Cordialement,
    Antoine
    "Plus haut, plus fort, moins de ressources..." - Bill Gates, 1998

  2. #2
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Salut,

    peut on voir la déclaration de ta classe enfant ? et un bout de la classe parent
    Zend PHP5 Certification
    MySQL 4 Core Certification

  3. #3
    Membre régulier Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Points : 97
    Points
    97
    Par défaut
    Etonnant, c'est normalement ce qui devrait se faire par défaut, puis après tu appelle ta méthode parente par un parent::_prepareColumns(). Il doit y avoir un problème dans ton code. Il faudrait donner du code à manger au développeur, pour qu'ils puissent ruminer.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Tu n'as pas a le spécifier quelle méthode utiliser, l'héritage est la pour ca.

    Il faudra que tu postes un peu de code car je ne vois pas pourquoi c'est la méthode de ta classe mere qui est appelée.

  5. #5
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Citation Envoyé par daajack Voir le message
    Etonnant, c'est normalement ce qui devrait se faire par défaut, puis après tu appelle ta méthode parente par un parent::_prepareColumns(). Il doit y avoir un problème dans ton code. Il faudrait donner du code à manger au développeur, pour qu'ils puissent ruminer.
    Je sais pas si j'ai bien compris ta remarque ... mais lui c'est bien la méthode enfant qu'il veut et normalement la méthode enfant "surcharge" la méthode parent.

    EXEMPLE 1
    Surcharger une méthode parente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
    Class A
    {
    	public function afficher()
    	{
    		echo "salut !";
    	}	
     
    }
     
    Class B extends A
    {
     
    	public function afficher()
    	{
    		echo "Bonjour !";
    	}
    }
     
    $b = new B();
    $b->afficher();
     
    // Bonjour !
    ?>
    EXEMPLE 2
    Utiliser une méthode parente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    Class A
    {
    	public function afficher()
    	{
    		echo "salut !";
    	}	
     
    }
     
    Class B extends A
    {
     
     
    }
     
    $b = new B();
    $b->afficher();
     
    // salut !
    ?>
    si j'ai bien compris ton problème GofFazer, tu aimerais te trouver dans l'exemple 2
    Zend PHP5 Certification
    MySQL 4 Core Certification

Discussions similaires

  1. [POO] PHP 5 - gestion de la persistance
    Par BRAUKRIS dans le forum Langage
    Réponses: 12
    Dernier message: 07/07/2010, 13h34
  2. Héritage en POO PHP
    Par Badaboumpanpan dans le forum Langage
    Réponses: 9
    Dernier message: 04/07/2008, 16h18
  3. Réponses: 4
    Dernier message: 05/06/2008, 23h20
  4. [POO] PHP et la gestion des classes
    Par Acti dans le forum Langage
    Réponses: 7
    Dernier message: 23/09/2005, 00h06
  5. [POO]Interdire l'héritage
    Par Coulon Arnaud dans le forum Langage
    Réponses: 7
    Dernier message: 06/04/2005, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo