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 :

Modification d'un élement de tableau passé par référence


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Modification d'un élement de tableau passé par référence
    Bonjour,

    Mon niveau en php ne me permet pas encore de comprendre le problème suivant.

    Je crée un tableau contenant des objets $obj1, $obj2, ... créés précédemment et héritant d'une classe dont une propriété est _isVisible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $monTableau = Array($obj1, $obj2, $obj3);
    Je le passe à une fonction qui doit indiquer le statut visible de l'ensemble des objets de mon tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->setVisible($monTableau , true);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected function setVisible(&$elementList, $isVisible)
    	{
    		foreach($elementList as $element) {			
     
    			$this->setElementIsVisible($element, $isVisible);			
    		}
    	}
    et j'ai une fonction qui s'occupe de l'élément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected function setElementIsVisible(&$element, $isVisible) 
    	{
    		$element->_isVisible = $isVisible;
    	}
    Et bien, que j'appelle ma fonction $this->setVisible($monTableau , true) ou $this->setVisible($monTableau , false), les propriétés _isVisible des élements de mon tableau $monTableau restent à true.

    Pourtant, en mettant des echo, je vois que je passe bien dans chaque fonction. Mais echo de $isVisible retourne 1 ou rien. Est-ce normal ?

    Une idée?

    Merci d'avance

  2. #2
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Bonjour
    ta variable $isVisible est un boolean, donc un echo renvoie 1 si true ou '' si false.
    Si tu peux afficher quelque chose de plus pertinent, tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($isVisible) { echo 'true';} else { echo 'false';}
    Tout énigme a une solution ! Tout est question de discipline !

  3. #3
    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,

    Ou plus simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $isVisible ? 'true' : 'false';
    L'opé ternaire est idéal pour ce genre de trucs. Faut pas en abuser par contre.
    Pourfendeur de singletons en croisade

  4. #4
    Membre averti Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Points : 300
    Points
    300
    Par défaut
    ou bien
    Mais ton problème est dans ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected function setVisible(&$elementList, $isVisible)
    	{
    		foreach($elementList as $element) {			
     
    			$this->setElementIsVisible($element, $isVisible);			
    		}
    	}
    car le foreach parcourt le tableau et $element serait une copie de chaque élément de tableau à chaque itération

    donc tu dois le changer en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    protected function setVisible(&$elementList, $isVisible)
    	{
    		foreach($elementList as &$element) {			
     
    			$this->setElementIsVisible($element, isVisible);			
    		}
                    /*
                    Ou encore (celle-ci ci-dessus est privilégée)
                    foreach($elementList as $key => $element) {			
     
    			$this->setElementIsVisible($elementList[$key], isVisible);			
    		}
                     */
    	}
    C'est en faisant n'importe quoi qu'on devient n'importe qui

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/03/2015, 09h23
  2. récupérer valeurs d'un tableau passé par post
    Par rvm31 dans le forum Langage
    Réponses: 5
    Dernier message: 27/01/2012, 21h03
  3. [MySQL] left outer join et concaténation dans un tableau passe par if mais pas par else ?
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/04/2008, 15h09
  4. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 01h12
  5. [POO] Problème de paramètre passé par référence
    Par dug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2005, 20h29

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