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 :

Modifier une méthode d'une classe déjà définie


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Modifier une méthode d'une classe déjà définie
    Bonjour à tous et merci de m'accueillir dans votre communauté.

    Je me permet de vous solliciter aujourd'hui car je suis entrain de "modder" le logiciel PHP Prestashop, moteur de boutique en ligne afin de lui ajouter une fonction de billetterie (pour faire simple il faut que Prestashop crée un billet et l'envoie par mail lorsque la commande passe d'un status non payé à payé).

    Pour réaliser ceci le plus simple est de modifier la classe "HookCore" de Prestashop et plus particulièrement sa méthode "updateOrderStatus" qui est appelé aussi bien par le front que par le back office, ce qui permet de générer le billet dans le cas d'un paiement direct par CB ou bien lorsqu'un admin va validé le paiement par chèque dans le back office.

    Voulant faire les choses bien, j'ai réfléchis au fait que si je moddais directement le fichier ou est déclaré la classe, ça allait être problématique lors des mises à jour de Prestashop, et puis ca ne fait pas pro du tout...

    Du coup je me suis créé un module Prestashop dans lequel je pensais redéclarer la classe concernée et sa méthode, mais j'ai vu qu'en PHP il n'était pas possible de redéclarer une classe contrairement à Ruby par exemple.
    Peut être voyez vous un moyen de contourner cela ?
    J'ai cherché toute la journée sans succès.

    Je vous remercie pour votre temps.
    Excellente soirée à vous tous.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    +1 pour créer une classe étendue.

    Cependant, coté Pretashop il est prévu un répertoire pour cela : override

    C'est dans celui ci qu'il faudra le faire sinon ça risque fort de ne pas fonctionner car il y a un auto-chargement de classe (config/autoload.php) qui prévoit de charger les classes d'une certaine manière.


    Au passage, tu peux très bien créer ton propre Module, qui lui peu aussi créer un nouveau Hook, qui ce dernier se chargerait de faire ce que tu veux.
    Chaque hook peut être exécuté au moment qu'on veut, c'est un des principes de PS, et il y en a pas mal (c'est théoriquement suffisant).
    Le gros avantage c'est que tout est géré/prévu via l'interface admin.

    Modifier voir même étendre une classe core n'est pas forcément la meilleure manière, particulièrement lors des futurs versions/compatibilités/maintenance, voire même son intégration.
    Faut voir.


    Il te faut aussi apprendre le concept qui a été adopté, le FrameWork en somme pour mieux "tirer partie" de cet outil.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci à tous, en effet cela fonctionne bien en utilisant le dossier d'override de Prestashop.

    Par contre pour faire mon module en version complète j'ai besoin de modifier plusieurs méthodes de plusieurs classes différentes, du coup je vais devoir créer plusieurs fichiers php dans le dossier d'override, pas super pro ni pratique.
    Sauriez vous s'il y a une méthode pour "overrider" en dehors du dossier override, par exemple dans un module ce serait l'idéal ca me permettrait d'avoir toute les redéfinition de classes et de méthode dans un seul fichier, le tout dans un module proprement installé désactivable à souhait.

    Merci d'avance.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Il te faut un fichier par classe étendu

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Sauriez vous s'il y a une méthode pour "overrider" en dehors du dossier override, par exemple dans un module ce serait l'idéal ca me permettrait d'avoir toute les redéfinition de classes et de méthode dans un seul fichier
    Non, pas au niveau d'un module car à ce moment une bonne partie des classes sont déjà chargées (incluses), les plus importantes en tout cas, donc tenter de le faire provoquera des erreurs fatales du aux doubles déclarations (à mon sens).

    Théoriquement il faut overrider chaque classe dans ce répertoire "override", c'est un des principes PS pour gérer des cas particuliers.


    Par contre pour faire mon module en version complète j'ai besoin de modifier plusieurs méthodes de plusieurs classes différentes, du coup je vais devoir créer plusieurs fichiers php dans le dossier d'override, pas super pro ni pratique.
    Au feeling comme ça, donc c'est une pure impression, je pense que tu n'aurais pas encore une bonne maitrise de ce soft PS, car si on regarde du coté du forum PS, de même quand moi même j'ai découvert ce soft, le réflexe c'est de surcharger (overrider) les classes selon les besoins qu'on estime particuliers.

    Or, avec le temps et une certaine maitrise de ce soft, on se rencontre qu'on peu éviter en majeur partie d'étendre les classes en créant 1 voir plusieurs modules, voir des hook.

    Faut pas perdre de vu que tous les modules intégrés d'origines et en tout genres n'ont pas demandés de surcharges de classes, et pourtant ils font des insertions, envoies de mails, etc ... cela à des moment très précis (entête, panier, prise de commande, partie head, corps de page, pieds de page, etc, etc ...).

    De même que l'exécution des hook (indirectement des modules) peuvent se faire très tôt dans les traitements, c'est à dire dans le FrontController::displayHeader()

    A part rare cas particulier qui demanderait de faire certains traitements avant cette méthode displayHeader() voir avant le FrontController, alors il y aurait juste le FrontController à surcharger.
    Sinon, vu le nombre de Hook existant, plus la possibilités de créer ses propres Hook, qui eux sont prévus d'être exécutés à des moment différents et de plus stratégiques, qui plus est peuvent être ordonnés coté admin (tel Hook en 1er, un autre en 2ème, etc ...), ceci offre une grande souplesse, beaucoup de possibilités.

    Mais encore, on peu créer un module et en parallèle son propre onglet coté Admin lié à une classe dans le module, et là, on peu faire énormément de choses.


    En somme, même si la description de ton besoin est sommaire, rien ne dit que des surcharges de classes soient nécessaires.
    Ceci dit, ton besoin est peut être réellement particulier.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/09/2009, 18h42
  2. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Réponses: 6
    Dernier message: 20/04/2007, 15h24
  5. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53

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