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 :

[syntaxe]this et accolade


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut [syntaxe]this et accolade
    Bonjour,

    Je bloque sur l'utilisation des accolades pour rendre ma variable de type objet dynamique.

    J'ai défini correctement $this->machin, et je voudrais parvenir à spécifier 'machin' via une variable, mais je n'y arrive pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $complement = 'machin';
     
    var_dump($this->machin);  // Ok, m'affiche le contenu de l'objet
    var_dump($this->{$complement});  // Non, m'affiche un "Parse error: syntax error, unexpected T_OBJECT_OPERATOR"
    var_dump(${'this->'.$complement});  // Non plus, mais cette fois m'affiche un "NULL"
    Si quelqu'un a une idée sur les raisons pour lesquelles ça ne marche pas, ou une suggestion, merci à vous...

  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
    Tu te compliques la vie :


    Tout simplement

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Merci Petibidon, mais ça ne marche pas...
    Ça me retourne NULL...

    De même que :
    (j'avais essayé dans le cas où)

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 893
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 893
    Points : 16 346
    Points
    16 346
    Par défaut
    Pourtant la syntaxe de Petibidon est la bonne.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $complement = 'machin';
     
    $o = new StdClass;
    $o->machin = 'Du texte';
     
    var_dump( $o->$complement );
    // string(8) "Du texte"

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Il se peut que le problème provienne du fait que j'utilise un tableau au lieu de 'machin' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $complement = 'machin[1]';
     
    $o = new StdClass;
    $o->machin[1] = 'Du texte';
     
    var_dump( $o->$complement );  // Renvoit NULL
    var_dump( $o->machin[1] );  // Renvoit 'Du texte'

  6. #6
    Membre actif Avatar de buse974
    Homme Profil pro
    Développeur / Chef de projet informatique
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur / Chef de projet informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 245
    Points
    245
    Par défaut
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump( $o->complement ); // sans le $
    Désoler j'ai dit une bétise ca ne fonctionne pas.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    J'ai aussi essayé une décomposition en $part1 et $part2 avec pour $part2 un numérique "pur", mais là encore ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $part1 = 'machin';
    $part2 = 1;
     
    $o = new StdClass;
    $o->machin[1] = 'Du texte';
     
    var_dump( $o->$part1[$part2] );  // Renvoit NULL
    var_dump( {$o->$part1}[$part2] );  // Renvoit un "Parse error": syntax error, unexpected '{'
    var_dump( ${o->$part1}[$part2] );  // Renvoit un "Parse error": unexpected T_OBJECT_OPERATOR

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 893
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 893
    Points : 16 346
    Points
    16 346
    Par défaut
    Tu as deux possibilités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $complement = 'machin[1]';
     
    $o = new StdClass;
    $o->machin[1] = 'Du texte';
     
    eval( 'var_dump( $o->' . $complement . ' );' );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $part1 = 'machin';
    $part2 = 1;
     
    $b = new StdClass;
    $b->machin[1] = 'Du texte';
     
    var_dump( $b->{$part1}[$part2] );

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Super !

    Les 2 solutions marchent en effet...
    L'idée de passer par eval est originale (fallait y penser), c'est la moins rigoureuse, mais c'est celle que je vais garder par facilité (au lieu de me casser la tête à décomposer la chaîne).

    Merci à vous tous

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par papa6 Voir le message
    ...au lieu de me casser la tête à décomposer la chaîne
    Faut pas exagérer... Les regex sont peut-être un peu compliquées, mais pas tant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(preg_match_all('#([a-z]*)(\[)([0-9]+)(\])#', $complement, $tab_retour, PREG_SET_ORDER)) {
      $part1 = $tab_retour[0][1];
      $part2 = $tab_retour[0][3];
    } else {
      echo "Erreur preg_match_all, entrée non conforme au masque.");
    }

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

Discussions similaires

  1. poo this et accolades
    Par mapmip dans le forum Langage
    Réponses: 1
    Dernier message: 30/07/2013, 11h12
  2. syntaxe avec des accolades
    Par monlou dans le forum Langage
    Réponses: 12
    Dernier message: 27/03/2010, 01h42
  3. Réponses: 0
    Dernier message: 20/02/2010, 16h30
  4. Réponses: 3
    Dernier message: 03/06/2007, 15h29
  5. Syntaxe inconnue avec accolades
    Par sir_gcc dans le forum Langage
    Réponses: 1
    Dernier message: 29/11/2006, 18h14

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