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 Perl Discussion :

Accéder à un l'objet modifié et non celui initialisé


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut Accéder à un l'objet modifié et non celui initialisé
    Bonjour,

    Pour synthétiser mon problème, je ne vais pas faire du copie/coller de code mais poser un code simple.
    J'ai 3 fichiers, A.pm, B.pm C.pm.
    Dans A.pm j'ai une classe A avec un constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package A;
    use strict;
    use warnings;
     
    sub new {
      my $proto = shift;
      my $class = ref($proto) || $proto;
      my $self  = {};
      $self->{NAME} = "Bob";
      bless ($self, $class);
      return $self;
    }
    Dans mon fichier B.pm, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package B;
    use strict;
    use warnings;
    use A;
    our $MonObjetA = new A();
    Puis dans le même fichier, dans une subroutine je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sub mafonctionB {
     $MonObjetA->{NAME} = "Angel";
    }
    Dans le fichier C.pm dans une subroutine, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package C;
     
    use strict;
    use warnings;
    use B;
     
    sub mafonctionC {
     print("Voici le nom de mon Objet".$B::MonObjetA->{NAME}."\n");
    }
    Dans mon main p.pl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    use strict;
    use warnings;
    use B;
    use C;
     
    B::mafonctionB();
    C::mafonctionC();
    Résultats: Ma subroutine m'affiche Bob alors que j'aimerai afficher Angel.
    Comment faire s'il vous plaît?
    En fait je voudrais que "mafonctionC" sache que j'ai fais une mise à jour du nom dans "mafonctionB"
    sans appeler la méthode juste avant le print. Il faudrait peut-être passer par des références
    mais tout ce que j'ai testé a échoué.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    qu'est-ce qui te fait penser que la fonction mafonctionB est appelée avec ce code?

    EDIT: pas cool de changer ton post initial sans le signaler. mafonctionB n'était appelé nulle part quand j'ai répondu.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut
    Bonjour,

    J'avais oublié un bout du code. Je viens de le mettre à jour.

    EDIT: Désolé pour la maj.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bonsoir,

    Merci de créer systématiquement un constructeur dans chaque classe. Merci de lire ce tutoriel : Perl et la programmation orientée objet.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Dans son exemple, je pense que koliko ne veut pas faire du module B une classe.

    Pourrais-tu compléter le print de ta fonction mafonctionC ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print("Voici le nom de mon Objet [".ref($B::MonObjetA)."] $B::MonObjetA->{NAME}."\n");
    et donner le résultat.

Discussions similaires

  1. Objet en lecture/ non modifiable
    Par javaDev dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 19/10/2009, 16h29
  2. Réponses: 2
    Dernier message: 01/02/2007, 18h50
  3. Retrouver les objets modifiés
    Par zooffy dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/12/2006, 12h42
  4. [Tomcat]Accéder au context via Ip et non LocalHost
    Par vdavid1982 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 07/04/2006, 11h22
  5. Objet.evenement --> Erreur : Non implémenté
    Par Darkdaemons dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/09/2005, 18h24

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