variable dynamique

Eléphanteau du PHP | 40 Messages

10 nov. 2009, 13:20

bonjour,

j'aimerais savoir s'il est possible de modifier dynamiquement le nom de la variable dans l'exemple ci-dessous (en fait, ajouter la valeur de $i à la fin de la variable) :

for($i=0; $i<5 ; $i++){
echo $Objet->variable$i;
}

comme ça ça ne marche pas...


merci!

ViPHP
ViPHP | 1136 Messages

10 nov. 2009, 13:56

Salut ,
echo $opjet->{"variable$i"};

Devrait fonctionner ...


Exemple simple pour illustrer :
$chiffre = 3;
$test3 = "toto";

echo ${"test$chiffre"};
Affiche "toto" !

Good luck , ch

Eléphanteau du PHP | 40 Messages

10 nov. 2009, 14:15

merci pour ta réponse,

ça marche pas non plus, j'ai beau essayer dans tous les sens. Pour être plus précis c'est ça que je voudrais :
for($i=0; $i<5; $i++){
echo $objet->variable$i->valeur;
}

ViPHP
ViPHP | 1136 Messages

10 nov. 2009, 14:20

ha ...

mais variable$i est un objet ?

ViPHP
ViPHP | 1136 Messages

10 nov. 2009, 14:24

Normalement , cette ecriture fonctionne ...

Voici le test : ( qui fonctionne )
class test {

    public $aaa = "toto";
}

$aaa1   =   new test();
$aaa2   =   new test();

$aaa1->aaa = "test1";
$aaa2->aaa = "test2";

$chiffre1 = 1;
$chiffre2 = 2;

echo ${"aaa$chiffre1"}->aaa;//affiche bien test1
echo ${"aaa$chiffre2"}->aaa;//affiche bien test2

Eléphanteau du PHP | 40 Messages

10 nov. 2009, 14:30

j'ai une fatal error quand jécris

$objet->${"objet$i"}->valeur

Eléphant du PHP | 369 Messages

10 nov. 2009, 15:02

Salut,
bonjour,
j'aimerais savoir s'il est possible de modifier dynamiquement le nom de la variable dans l'exemple
ci-dessous (en fait, ajouter la valeur de $i à la fin de la variable) :
for($i=0; $i<5 ; $i++){
echo $Objet->variable$i;
}
comme ça ça ne marche pas...
merci!
 
 class Bidon
  {
     public $MaVariable_0 = "Zero";
     public $MaVariable_1 = "Un";
     public $MaVariable_2 = "Deux";
     public $MaVariable_3 = "Troix";
     public $MaVariable_4 = "Quatre";
     public $MaVariable_5 = "Cinq";
  }

  $classBidon = new Bidon();

  $var = "MaVariable";

  $bfWork = true;

  for ($i=0; $i<50 && $bfWork; $i++)
  {
     $newVar = $var."_".$i;

     if (isset($classBidon -> $newVar))
     {
        echo "> ".$i." ";
        echo $classBidon -> $newVar."<br>";
     }
     else $bfWork = false;
     // Un else break; bien que possible est moins élégant je trouve...
     // en même temps, c'était pas ta question: ca tombe bien ; - )
  }

  die("<br>That's end !!!");
Enfait, lors du parse php évalue mot à mot donc, ton éxemple se comprend ainsi:
$Objet->variable; hors, "variable" n'existant pas une erreur est soulevée.
Faut concaténner avant et ensuite, seulement, exécuter.

@+ bon code ;)

ViPHP
ViPHP | 1136 Messages

10 nov. 2009, 15:10

Exacte , mais uniquement si tu utilise de simple quote '

entre des double quote " , la variable est automatiquement interprété , il n'y a donc pas besoin de s'embêter à concaténer .
j'ai une fatal error quand jécris
Quelle est l'erreur ... tu te doutes bien , que sans elle nous ne pouvons faire beaucoup plus ....
La syntaxe est bonne , ton type doit donc être faut ....

D'ou ma question ,

variable$i est-il un objet ?

Ch.

Eléphanteau du PHP | 40 Messages

10 nov. 2009, 15:41

En concaténant avant ça ne résout pas le pb, mais merci de la réponse.

Message d'erreur :

Fatal error: Cannot access empty property in C:\wamp\www\rn\templates\portfolio\index.php

c'est du code joomla que j'essaie de triturer. Je ne sais pas quel est le type de "variable$i", cette "variable" correspond au nom d'un champ de formulaire crée via le backend joomla.

quand j'écris $objet->champ_1->valeur, ça marche

alors que $objet->${"champ_$i"}->valeur, renvoie fatal error.

ViPHP
ViPHP | 1136 Messages

10 nov. 2009, 15:43

Enléve le "$" devant {

comme ceci :
$objet->{"champ_$i"}->valeur

Eléphanteau du PHP | 40 Messages

10 nov. 2009, 15:51

ça ne fonctionne tjrs pas... louche cette affaire.

ViPHP
ViPHP | 1136 Messages

10 nov. 2009, 15:52

Que retourne un
var_dump($objet->champ_1);

Eléphanteau du PHP | 40 Messages

10 nov. 2009, 15:57

var_dump($objet->champ_1) retourne NULL

var_dump($objet->champ_1->valeur) retourne la valeur du champ enregistré dans la BDD