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 :

Variables dynamiques : quel usage ?


Sujet :

Langage PHP

  1. #1
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut Variables dynamiques : quel usage ?
    ${$list} ou $$list, c'est pareil.
    Ah bon Jreaux ?
    J'ai toujours cru (enfin depuis que j'ai compris l'existence des variables dynamiques), que

    $$variable désignait le nom de variable, genre le conteneur, et devait être utilisée à l'initialisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for($i=1;$i<=10;$i++){
       $$variable='nom'.$i;
    }
    Et que ${$variable} désignait la valeur, le contenu de la variable, et devait donc être utilisée à l'affectation ou à la convocation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i=1;$i<=10;$i++){
       $$variable='nom'.$i;
       ${$variable}=rand(1,10);
       echo  $$variable.' vaut '. ${$variable}.'<br/>';
    }
    Mais ça serait pas la première fois que je comprends de travers.
    D'autant que si je trouve le manuel PHP parfois peu didactique, foi d'ex enseignante fan de didactique, je trouve que la page sur les variables dynamiques est parmi ce qui peut se faire de pire !

    Choisir le bon exemple, c'est 80% du boulot de didactique, surtout quand il y a une couche d'abstraction supplémentaire, comme dans le cas des variables dynamiques. alors quand je vois des "profs", mettre des $$a='b'... pour brouiller les pistes, y a pas mieux.

    J'adorerais pouvoir proposer des exemples qui font sens sur le manuel PHP. Genre si t'es un peu vif d'esprit, tu vas droit aux exemples, t'as compris toutes les nuances de la méthode.
    un ou des exemples soigneusement travaillé(s), ça pourrait être l'illustration parfaite de la signature de méthode dans toutes ses nuances.

    [elle_raconte_sa_vie]
    Quand j'ai étudié Java, j'avais un prof qui n'avait sans doute pas la vocation. Pour nous donner des exemples d'instanciation, il nous écrivait au tableau des trucs genre
    a=new b();
    b=new c();
    c=new d();
    Plus il expliquait, plus on pleurait, et ce, jusqu'à la veille de l'examen final.
    on a failli finir en suicide collectif, et pour ne pas nous pénaliser, il a du filer des notes sympas qui étaient du grand n'importe quoi, comme son cours.
    [/elle_raconte_sa_vie]

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il suffit de TESTER :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $variable = 'toto';
     
    $toto = 'coucou !';
    echo '$$variable : '.$$variable.'<br />';
    echo '${$variable} : '.${$variable}.'<br />';
     
    $toto = 'c\'est moi !';
    echo '$$variable : '.$$variable.'<br />';
    echo '${$variable} : '.${$variable}.'<br />';
    ?>
    Si $variable vaut 'toto', $$variable et ${$variable} représentent alors $toto.

    Par contre, il faut utiliser ${.....} avec une variable "composée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $variable = 'toto';
     
    $je_suis_toto = 're-coucou !';
    echo '${\'je_suis_\'.$variable} : '.${'je_suis_'.$variable}.'<br />';
     
    $je_suis_toto = 'c\'est encore moi !';
    echo '${\'je_suis_\'.$variable} : '.${'je_suis_'.$variable}.'<br />';
    ?>
    • ${'je_suis_'.$variable} : OK
    • $'je_suis_'.$variable ne fonctionne pas.


    Citation Envoyé par Dendrite Voir le message
    ...J'adorerais pouvoir proposer des exemples qui font sens sur le manuel PHP...
    Mais tu peux !!
    Vas tout en bas de la page, tu trouveras un bouton "+ add a note" !
    Dernière modification par Invité ; 24/04/2018 à 16h45.

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Mince, je fais un beau hors-sujet là !
    Mais bon, si tu as le courage de déplacer la discussion à partir de mon message précédent et de titrer "Variables dynamiques : quel usage ?"

    OK, mes questions sur les variables dynamiques se clarifient.
    Si j'ai bien compris, on s'en moque de stocker dans la variable dynamique le nom dynamique... Elle ne stocke QUE la valeur dynamique.
    Question suivante : quelle application PRATIQUE ? Un seul exemple où ça peut résoudre quelque chose en évitant une redondance de code ?
    Je ne parviens pas à trouver.

    Parce que ma première idée, à partir d'un tableau associatif departements, créer des variables dynamiques, ben aucun intérêt, si ce n'est de réécrire la fonction extract() dont tu dis par ailleurs que c'est une mauvaise pratique.

    Code PHP : 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
    $normandie = array(
    0 => array('code' => '14', 'nom' => 'Calvados'),
    1 => array('code' => '27', 'nom' => 'Eure'),
    2 => array('code' => '50', 'nom' => 'Manche'),
    3 => array('code' => '61', 'nom' => 'Orne'),
    4 => array('code' => '76', 'nom' => 'Seine Maritime'),
    );
    //on réinvente la fonction extract
    /*foreach ($normandie as $row){
    	foreach ($row as $key => $value){
    		$$key= $value;
    		//simple vérification
    		echo '$$'.$key.' vaut '.$value.'<br/>';
    	}
    }
    */
    //on vérifie ce que fait extract() pour comparer
    //ben exactement la même chose, mais en une ligne
    extract($normandie);
    foreach ($normandie as $row){
    	foreach ($row as $key => $value){
    		$var_dyn='$'.$key;
    		if(isset($var_dyn)){
    			echo '$$'.$key.' vaut '.$value.'<br/>';
    		}
    	}
    }

    Résultat dans les 2 cas

    $$code vaut 14
    $$nom vaut Calvados
    $$code vaut 27
    $$nom vaut Eure
    $$code vaut 50
    $$nom vaut Manche
    $$code vaut 61
    $$nom vaut Orne
    $$code vaut 76
    $$nom vaut Seine Maritime

  4. #4
    Invité
    Invité(e)
    Par défaut
    Perso, j'enregistre en BDD les traductions de titres, contenus,... dans des colonnes 'titre_fr', 'titre_en', 'titre_jp',... (à chacun sa méthode !)

    Pour, les récupérer, les modifier,... j'utilise des variables dynamiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $langues = ['fr', 'en', 'jp'];
    foreach( $langues as $lg )
    {
       ${'titre_'.$lg} = htmlspecialchars( $row['titre_'.$lg] );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $langues = ['fr', 'en', 'jp'];
    foreach( $langues as $lg )
    {
       echo '<input type="text" name="titre_'.$lg.'" value="'.${'titre_'.$lg}.'" />';
    }
    Pour l'affichage, en fonction de la "langue en cours" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ${'titre_'.$langue_en_cours};
    N.B. Je sais qu'on pourrait utiliser un array $titre[$lg].
    Mais ce n'est pas le propos.
    Dernière modification par Invité ; 22/04/2018 à 15h06.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/06/2007, 16h50
  2. Utiliser des variables d'une BDD
    Par Ragnarok_1er dans le forum Access
    Réponses: 3
    Dernier message: 25/01/2006, 09h32
  3. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 11h55
  4. [MFC] utilisation des variables associées
    Par Grey dans le forum MFC
    Réponses: 2
    Dernier message: 18/11/2005, 15h00
  5. Utiliser des variables d'environnements
    Par Xam335 dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/08/2004, 15h15

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