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 :

Appel variable statique d'une classe


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut Appel variable statique d'une classe
    Bonjour,

    je souhaite connaitre le contenu de ma variable "$monTableau", contenu dans ma classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class maClasse
    {
        public static $monTableau = array();
     
        function maFonction()
        {
        ...
        self::$monTableau = "contenu";
        ...
        }
    }
    J'appelle ma variable dans mon script
    et me retourne "Array()"

    Je voudrai obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array([0] => "contenu")
    mais je ne comprend pas pourquoi mon tableau est vide ?

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Salut,

    Il faut deja faire appel a maFonction() pour le remplir ....
    Puis pour afficher le contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maClasse::$monTableau[0];
    Edit : note que le array est remplacé par la string donc le [0] ne marche pas
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    tu as appelé maClasse::maFonction() avant de récupérer maClass::$monTableau, vu que celle ci en détermine la valeur ?

    Accessoirement ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     self::$monTableau = "contenu";
    Va écraser le tableau.

  4. #4
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    tu as appelé maClasse::maFonction() avant de récupérer maClass::$monTableau, vu que celle ci en détermine la valeur ?
    Il est vrai que je n'ai pas tout dit, j'ai bien appelé ma fonction avant de connaitre la valeur qu'elle contient. Voila mon appel plus détaillé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tab = maClasse::$monTableau ;
    //si je fais echo $tab ici j'obtiens Array() donc un tableau vide
            foreach($tab as $cle => $value)
            {
               //Mon traitement
            }
    Si je fait un echo $tab dans ma class juste après avoir affecté sa valeur j'otiens bien se que je veux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class maClasse
    {
        public static $monTableau = array();
        
        function maFonction()
        {
        ...
        echo self::$monTableau = "contenu";//renvoi mon tableau associatif correct
        ...
        }
    }
    Il semblerait que je n'ai pas accès à ma variable static ? Ais je bien déclaré ma class ?

    Merci

  5. #5
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    On ne voit toujours pas d'appel a "maFonction()" de plus on te le répète ta façon de procéder va écraser le tableau.
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  6. #6
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    On ne voit toujours pas d'appel a "maFonction()"
    Mon appel à ma fonction se fait avant dans un autre fichier PHP en utilisant AJAX, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $classInstanciation = new maClasse();
    $classInstanciation->maFonction()
    de plus on te le répète ta façon de procéder va écraser le tableau
    Alors imaginons que ça écrase mon fichier pourquoi dans ma classe j'obtiens biens mon tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo self::$monTableau = contenu
    /*retourne Array
    (
        [0] => ./dossier test/b/test/Collines.jpg
    )*/
    Merci

  7. #7
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    je viens de voir que j'ai fait une erreur de retranscription je voulais dire ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo self::$monTableau [$indice] = contenu
    où $indice est une variable qui s'incrémente à chaque tout de boucle

  8. #8
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    En faite ma question est : Est il possible de récupérer le contenu de ma variable $monTableau (qui est un tableau) en dehors de la classe (maClasse) où elle est remplie ??

    Merci de votre aide

  9. #9
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Si je remplace l'initialisation de ma variable dans la classe par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class maClasse
    {
        static public $monTableau ="une chaine";
    
        function maFonction()
        {
        ...
        echo self::$monTableau = "une autre chaine";
        ...
        }
    }
    avec mon appel en dehors de la classe comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    $classInstanciation = new maClasse();
    $classInstanciation->maFonction()
    ...
    $tab = maClasse::$monTableau ;
    //si je fais echo $tab ici j'obtiens "une chaine" 
           ...
    Ainsi, je remarque que lorsque je veux appeler ma variable en dehors de la classe elle me retourne sa valeur d'initialisation ! Je ne comprend pas pourquoi car dans la classe je lui est pourtant assigné un contenu.

    Merci pour votre aide

  10. #10
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    je viens d'essayer ce code et je vois bien s'afficher "une autre chaine"

    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
    {
        static public $monTableau = "une chaine";
     
        function maFonction()
        {
            self::$monTableau = "une autre chaine";
        }
    }
     
     
    $classInstanciation = new maClasse();
    $classInstanciation->maFonction();
     
    var_dump(maClasse::$monTableau);

  11. #11
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Je suis tout a fait d'accord avec toi, chez moi aussi ca marche. Par contre si je sépare l'appel de ma fonction et l'appel de ma variable ca ne marche plus.

    Appel de ma fonction dans fichier1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $classInstanciation = new maClasse();
    $classInstanciation->maFonction();
    Appel de ma variable dans fichier2.php

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    fichier1.php inclut fichier2.php ou ce sont deux scripts indépendants ?

  13. #13
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Ce sont 2 scripts indépendants mais qui font appel à la même classe "maClasse"

  14. #14
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par Général03 Voir le message
    Ce sont 2 scripts indépendants mais qui font appel à la même classe "maClasse"
    ah donc c'est normal, les valeurs statiques des classes sont seulement gardées dans la page en cours
    si tu veux garder une valeur entre plusieurs pages, il faut stocker la valeur dans une session (valeur pour l'utilisateur en cours) ou dans une base de données (valeur pour tous les utilisateurs)

  15. #15
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Ok nosferapti je comprend mieux pourquoi je n'arrive pas à accéder à cette valeur, merci.
    Par contre, au lieu d'utiliser une connexion à une base de données pour stocker mon tableau, ne serait il pas plus judicieux de déclarer ma variable en global pour qu'elle soit accessible depuis n'importe qu'elle page ?

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    global ne permet pas de faire transiter une variable entre des scripts indépendants.

    Pour cela le plus simple est de passer par le système de sessions (session_start() et $_SESSION...)

  17. #17
    Membre éclairé Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Par défaut
    Merci pour votre patience et pour votre diagnostic, je vais utiliser une variable session alors

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel Variable statique dans une autre classe ?
    Par noula_27 dans le forum Langage
    Réponses: 6
    Dernier message: 15/01/2013, 23h06
  2. [1.x] déclarer variables statiques dans une classe controller
    Par flora806 dans le forum Symfony
    Réponses: 8
    Dernier message: 15/10/2012, 17h26
  3. Appel variable session dans une class
    Par safisafi dans le forum ASP.NET
    Réponses: 4
    Dernier message: 04/04/2008, 10h59
  4. Réponses: 14
    Dernier message: 05/09/2006, 01h17
  5. [Tableaux] Probleme variable statique dans une classe
    Par Joe Le Mort dans le forum Langage
    Réponses: 7
    Dernier message: 31/08/2006, 11h35

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