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] Appel de méthode dans une autre méthode de la même classe


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut [POO] Appel de méthode dans une autre méthode de la même classe
    Bonjour,

    ça fait plusieurs heures que je bloque sur le problème.

    J'appelle la fonction getPageCourante() dans la fonction getSuivant(), ça ne pose pas de problème. Par contre, si (dans getSuivant() toujours) j'appelle setPageCourante("nouvellepage") alors ça ne change pas l'attribut pageSuivante...

    Ma classe est un singleton, ça peut être ça?

    J'ai viré des trucs pour la lisibilité, mais si vous voulez, je peux fournir toute la classe.

    $this->noeud est bien initialisé, le problème ne doit pas venir de là.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    class Transition {
     
    	private static $instance;
    	protected $xml;
     
    	protected $pageCourante;
    	protected $estConnecte;
    	protected $noeud;
     
    	private function __construct() {
    		$this->xml = simplexml_load_file(UI_FILE . 'xml/transition.xml');
    		$this->pageCourante = "";
    		$this->noeud = "";
    		$this->estConnecte = false;
    	}
     
    	// Rend le clonage impossible
    	private function __clone() {}	
     
    	// renvoie l'instance du xml
    	public static function getInstance() {
    		if (!(self::$instance instanceof self)) {
    			self::$instance = new self();
    		}
    		return self::$instance;
    	}
    	// Renvoie la page suivant $this->pageCourante
    	public function getSuivant() {
    		$flag = false;
    		if (self::getPageCourante() == "") {
    			self::setPageCourante("nouvellepage");
    			return $this->noeud->etapesUniques->page[0];
    		}
    		else {// pas d'importance, ça bloque avant!
                    }
    	}
     
    	// Mutateurs
    	public function setPageCourante($new) {
    		$this->pageCourante = $new;
    	}
    	// Accesseurs
    	public function getPageCourante() {
    		return $this->pageCourante;
    	}
    }
    Si quelqu'un pouvait me donner un coup de main...

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Hello,

    Tes méthodes getPageCourante et setPageCourante ne sont pas statiques et travaillent au niveau instance.
    Donc il ne faut pas les appeler par self::methode() mais $this->methode().

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Malheureusement, ça ne marche pas plus!

    mais merci beaucoup pour l'info!

  4. #4
    Membre chevronné 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
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par LunaSev Voir le message
    Malheureusement, ça ne marche pas plus!

    mais merci beaucoup pour l'info!
    montre nous un bout de code qui utilise cette classe pour qu'on puisse tester chez nous

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Je viens de me rendre compte que ma classe marchait en fait, le problème est ailleurs :
    Je fais un getSuivant() dans un fichier AjaxAfficheur.php, et ensuite je "vais" dans ajaxEnregistreur.php, et là, les modifications apportées à pageCourante (dans la classe Transition) sont supprimées...

    Comment est-ce possible? Est-ce qu'une autre instance est créée? Transition est un singleton normalement...

    (Nosferapti, j'adore ton pseudo, tu me rappelles de très bons moments^^)

    Edit : j'ai pas mis de code, vous en voulez toujours?

    re-Edit : J'ai modifié mon code : j'appelle getSuivant uniquement dans ajaxAfficheur (de toute façon c'est plus logique!) mais à chaque nouvel appel de la page (c'est à dire à l'envoi d'un formulaire), les modifications apportées à pageCourante (dans la classe Transition) sont supprimées...
    Je suis totalement perdu!

  6. #6
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    Hum ... n'y aurait-il pas un problème de sérialisation de ta classe Transition pour passage de page en page ?
    http://php.net/manual/fr/function.serialize.php

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Je ne sérialise pas en "dur" ma classe.
    Est-ce qu'il faut que je le fasse? comme ça : http://www.php.net/manual/fr/languag...ialization.php

    Je ne m'étais jamais occupé de sérialiser quoi que ce soit avant (en meme temps je débute donc bon!^^)

  8. #8
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Citation Envoyé par LunaSev Voir le message
    re-Edit : J'ai modifié mon code : j'appelle getSuivant uniquement dans ajaxAfficheur (de toute façon c'est plus logique!) mais à chaque nouvel appel de la page (c'est à dire à l'envoi d'un formulaire), les modifications apportées à pageCourante (dans la classe Transition) sont supprimées...
    Je suis totalement perdu!
    C'est normal, à la fin de l'exécution du script toutes les variables, objetcs, ressources sont détruits. Si tu veux de la persistance tu dois absolument sérialiser.

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    A ce que je comprends de ton problème, j'ai l'impression qu'il y a une mauvaise compréhension du fonctionnement d'un site avec PHP.

    En simplifiant très fort :
    Il savoir que php est un langage de script, qui s'exécute à un instant T, qui renvoie son résultat puis "meurt". Lors de l'appel de page suivant, c'est un tout autre script qui s'exécute. N'importe quelle classe, qu'elle soit en singleton ou pas, n'existe que pendant l'exécution du script et ne sera pas récupérée au script suivant.

    Les sessions permettent de passer des paramètres et des données d'un script à l'autre, mais c'est le seul lien qui existe. Si tu veux qu'une instance de classe garde ses données d'une exécution à l'autre, il faut la passer en session.

  10. #10
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    En simplifiant très fort :
    Il savoir que php est un langage de script, qui s'exécute à un instant T, qui renvoie son résultat puis "meurt".
    c'est d'ailleurs le principe pour toute application/programme écrit en n'importe quel langage : les données ne sont en mémoire que durant l'exécution, une fois le programmé arrêté toutes les données relatives sont vidés.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour l'explication. En y réfléchissant, ça semble plutôt évident, mais sans y réfléchir, je me disais... et bien, je ne sais pas ce que je me disais!

    Du coup je fais comment?
    La doc php dit que session_register est obsolète.
    Il faut que je sauvegarde tout l'objet ou juste l'attribut pageCourante?

    merci pour votre aide!

Discussions similaires

  1. appeler une méthode dans une autre méthode
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 11/04/2010, 13h29
  2. [POO] Appel d'une méthode dans une autre méthode
    Par lisa.a dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2010, 16h42
  3. Appel d'une méthode dans une autre webpart
    Par horn33t dans le forum SharePoint
    Réponses: 6
    Dernier message: 24/07/2009, 13h36
  4. Réponses: 5
    Dernier message: 06/06/2008, 11h40
  5. [POO] Retourner une variables contenu dans une autre méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 6
    Dernier message: 15/10/2007, 16h29

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