Forum Programmation.php Accéder aux propriétés d'un objet à partir d'une chaine.

Posté par  (site web personnel) .
Étiquettes : aucune
0
13
avr.
2006
Hello ! J'ai un magnifique objet $employe où je peux atteindre la valeur nom en via $employe->nom;. pour l'instant rien de miraculeux. comment faire si maintenant je récupère une chaine de caractères "nom" ou une autre propriété de l'objet ?

en gros j'ai :
$prop = "nom"; echo $employe->$prop;

mais ça marche pas bien sur. voili voilou. je sais jamais comment ce genre de techniques s'appelle c'est pour cela que je trouve jamais de réponse sur le net alors que ça doit etre tout con.


Miciii. Nicolas
  • # Hum

    Posté par  (site web personnel) . Évalué à 1.

    J'suis pas un spécialiste de php, mais je pense que la solution c'est la fonction eval, qui interprete une string comme du code (gare aux failles de sécurité avec ca parcontre !) :

    <?
    class Personne{
    var $nom;
    }

    $blou = new Personne();
    $blou->nom = "pouet";


    $prop = "nom";
    $chaine = "\$resultat = \$blou->$prop;";
    eval($chaine);
    echo $resultat;

    ?>

    Je crois pas qu'on puisse mettre le eval() directement dans un echo, donc j'suis passé par une variable temporaire "$resultat".
    • [^] # Re: Hum

      Posté par  (site web personnel) . Évalué à 2.

      oula, je m'excuse ! faut que je me réveille en fait parce que $obj->$prop à l'air de fonctionner...

      je vais aller me faire un café :D.

      par contre j'ai un objet qui retourne un array depuis une fonction getArray et un $obj->getArray()[0] ne fonctionne pas. En passant par une variable temporaire pour stocker le tableau ça marche, mais directement je ne trouve pas...
      • [^] # Re: Hum

        Posté par  (site web personnel) . Évalué à 0.

        Effectivement :)

        Bon bah t'auras p't'être appris le fonctionnement de eval() ^^
    • [^] # Re: Hum

      Posté par  (site web personnel) . Évalué à 0.

      Je crois pas qu'on puisse mettre le eval() directement dans un echo, donc j'suis passé par une variable temporaire "$resultat".

      Après m'être un peu documenté, je me corrige moi même en disant que si, c'est possible, avec l'instruction return.

      Ce qui nous donne donc (pour coller au plus juste avec ta question) :

      <?
      class Employe{
      var $nom;
      }

      $employe = new employe();
      $employe->nom = "cho7";

      $prop = "nom";

      echo eval("return \$employe->$prop;");


      ?>



      Enjoy.
      • [^] # Et en Python ?

        Posté par  . Évalué à 1.

        Bon je sais que ce n'est pas le bon forum, mais je profite de la question pour rebondir dessus.

        Je voudrais faire la même chose en Python, en particulier pour passer en revue tous les attributs et toutes les méthodes d'un widget...

        Guilhelm

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.