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] fonction dans une méthode passation d'un attribut ou de $this


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut [POO] fonction dans une méthode passation d'un attribut ou de $this
    Bonjour à tous,

    J'ai un petit problème que je ne sais résoudre...

    Je possède une méthode d'une classe qui contient elle même une fonction de callback utile uniquement à cette méthode.

    Un exemple simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class maClasse
    {
        private $attr = 10;
        private function maMethode()
        {
            function maFonction($attribut)
            {
               // Ici j'ai besoin de pouvoir accéder à $this->attr
            }
            // Ici un preg_replace_callback() se servant de maFonction()
        }
    }
    Mon problème est que je ne sais pas comment accéder dans maFonction() à $this.

    Je ne peux passer $this->attr dans les arguments de maFonction(), à moins qu'il n'y est un moyen de le faire que je ne connaisse pas.
    Je ne peux mettre $this->attr en global, php me jette un fatal error, ce qui est complètement logique.

    Ma question donc comment faire pour que maFonction() puisse accéder à $this ?

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    En passant a MaFonction() une référence vers l'objet de base...

    Ca marche ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class maClasse
    {
        private $attr = 10;
        private function maMethode()
        {
            function maFonction($attribut, $MyObj = $this)
            {
               echo $MyObj->attr;// Ici j'ai besoin de pouvoir accéder à $this->attr
            }
            // Ici un preg_replace_callback() se servant de maFonction()
        }
    }

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Non justement, on ne peut pas faire ça.

    Parse error: syntax error, unexpected T_VARIABLE


  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    bon bhé faut enlever le = $this de la déclaration de la fonction, et le passer a la main quand tu appels ta methode...

    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
    class maClasse
    {
        private $attr = 10;
        private function maMethode()
        {
            function maFonction($attribut, $MyObj)
            {
               echo $MyObj->attr;// Ici j'ai besoin de pouvoir accéder à $this->attr
            }
            // Ici un preg_replace_callback() se servant de maFonction()
            maFonction('xxx', $this);    
     
         }
     
    }

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Oui merci, sauf que j'ai besoin d'utiliser cette fonction dans mon preg_replace_callback()

    J'aurais pu le faire avec call_user_func() mais cela ne va pas car je n'ai plus la variable correspondant à mon pattern.

    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace_callback('lemasque', call_user_func('maFonction', $this->attr), $sujet);
    Je n'ai plus le pattern qui est passé en paramètre de ma fonction de callback, et donc je me retrouve avec un seul argument passé.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 306
    Points : 15 634
    Points
    15 634
    Par défaut
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class maClasse
    {
        private $attr = 10;
     
        private function maMethode()
        {
            preg_replace_callback('lemasque', array($this, 'maMethodeCallback'), $sujet);
        }
     
        private function maMethodeCallback($arg)
        {
            // accès à $this->attr
        }
    }

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Oui, comme ça c'est possible, je le savais, mais je ne voulais pas déclarer cette fonction comme méthode de ma classe.

    Quand même étrange que l'on ne puisse pas passer $this à une fonction interne à une méthode.

  8. #8
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut
    Oui, comme ça c'est possible, je le savais, mais je ne voulais pas déclarer cette fonction comme méthode de ma classe.
    Pourquoi pas ? Je sais pas si c'est très objet de déclarer une fonction dans une méthode !

Discussions similaires

  1. 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
  2. Réponses: 2
    Dernier message: 31/12/2007, 13h50
  3. [POO] Deux paramètres dans une méthode ?
    Par SBL69 dans le forum Langage
    Réponses: 2
    Dernier message: 18/09/2007, 11h54
  4. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  5. [POO] Fonctions dans une classe abstraite
    Par Seth77 dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2006, 13h21

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