Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/02/2008, 12h55   #1
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
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 :
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 ?
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 13h03   #2
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
En passant a MaFonction() une référence vers l'objet de base...

Ca marche ça ?

Code :
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()
    }
}
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 13h41   #3
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Non justement, on ne peut pas faire ça.

Parse error: syntax error, unexpected T_VARIABLE

Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 14h00   #4
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
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 :
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);    
 
     }
 
}
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 19h37   #5
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
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 :
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é.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 20h52   #6
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
essaye ça :
Code :
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
    }
}
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 20h43   #7
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
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.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2008, 20h49   #8
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

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

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Citation:
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 !
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h47.


 
 
 
 
Partenaires

Hébergement Web