[RESOLU] variable variable en PHP et objet

Eléphanteau du PHP | 16 Messages

26 févr. 2008, 22:35

Bonsoir,
Donc, j'ai un tit pb avec mes variables variables, un tit exemple en dira plus :
for ($i=1 ; $i<=$nb ; $i++)
		{
			echo "(*)Titre ".$i." : <br />";
			echo '<input type="text" name="titre'.$i.'" value="'.$this->Atitre1.'"/><br />';
		}
Comme vous pouvez le constater, la valeur par défaut est "$this->Atitre1", or ce "1" est spécifique à la première entrée Titre. Donc au Titre 2, la value sera la même, et je voudrais donc que ma variable passe en "$this->Atitre2".
Je me suis dit, variable variable en fonction de mon $i.
J'ai fait des test :
for ($i=1 ; $i<=$nb ; $i++)
		{
			$titre1 = "blabldkjsldkfjsldkfjslfdkjsdlfkjsdlfkjsdf";
			$val1 = "titre";
			
			echo "(*)Titre ".$i." : <br />";
			echo '<input type="text" name="titre'.$i.'" value="'.${$val1.$i}.'"/><br />';
		}
Cela donne bien "blabldkjsldkfjsldkfjslfdkjsdlfkjsdlfkjsdf".

Donc l'idée est bonne, mais dès que je mets :
for ($i=1 ; $i<=$nb ; $i++)
		{
			$val1 = "this->Atitre";
			
			echo "(*)Titre ".$i." : <br />";
			echo '<input type="text" name="titre'.$i.'" value="'.${$val1.$i}.'"/><br />';
		}
Cela ne fonctionne plus : rien ne s'affiche ... hors, $this->Atitre1 existe bien et n'est pas une constante.

Si quelqu'un a une idée ...
merci.
Modifié en dernier par lenouvdu44 le 27 févr. 2008, 02:30, modifié 3 fois.
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image

Eléphant du PHP | 445 Messages

26 févr. 2008, 22:42

Fait de Atitre un tableau à index numérique.

Tu y accéderas comme ceci :
this->Atitre[$i]

Mammouth du PHP | 19672 Messages

26 févr. 2008, 22:45

Simplifie en définissant tes valeurs avant l'insertion dans ta chaine HTML :
<?php
//...
      for ($i=1 ; $i<=$nb ; $i++)
      {
          $titre = 'titre'.$i;
          $valeur = $this->Atitre . $i;
          echo '<input type="text" name="'. $titre .'" value="'. $valeur .'" /><br />';
      }
//...
?>
@h0_noMan : ce n'est pas un tableau, il cherche à concaténer une propriété de classe et un suffixe comportant une incrémentation ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 445 Messages

26 févr. 2008, 22:54

@h0_noMan : ce n'est pas un tableau, il cherche à concaténer une propriété de classe et un suffixe comportant une incrémentation ;)
Moi, dans ce genre de cas j'utilise un tableau plutôt que définir x variables, j'utilise un tableau. :)

Eléphanteau du PHP | 16 Messages

26 févr. 2008, 22:55

Merci pour les réponses.
@Cyrano :
Ta solution ne fonctionne pas ... elle m'affiche "1" dans mon champ.

Je viens d'avoir une réponse sur un autre forum (dtpc.net) qui me propose l'utilisation de eval(), ce qui donnerait :
$value="' . eval('$this->Atitre' . $i) . '"
Je vous tiens au courant.

EDIT : cela ne fonctionne pas non plus :ah:

EDIT : si si, cela fonctionne, juste bien faire la fonction eval(), voici ce que cela donne :
		for ($i=1 ; $i<=$nb ; $i++)
		{			
			eval("\$value = \$this->Atitre" . $i . ";");
			echo "(*)Titre ".$i." : <br />";
			echo '<input type="text" name="titre'.$i.'" value="'.$value.'" /><br />';
		}
Merci pour ceux qui ont cherché, et merci à "Vin-moi" d'avoir trouvé la solution (de dtpc.net).
Modifié en dernier par lenouvdu44 le 27 févr. 2008, 02:31, modifié 1 fois.
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image

ViPHP
ViPHP | 4674 Messages

27 févr. 2008, 01:36

eval est crade et lent. Oublie cette solution.

Tu devrais plutôt essayer :
$value = $this->{'Atitre' . $i};
ça ira mieux :).
Mais un tableau serait plus propre, plus facile à manipuler, plus clair, plus rapide, et plus léger àmha.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 16 Messages

27 févr. 2008, 02:05

Salut,
Ta solution fonctionne aussi, et je la préfère ^^

Pour le tableau, j'y ai pensé, mais j'utilise cette méthode qu'une seul fois pour chaque entrée de formulaire. Je n'ai aucune manipulation à faire dessus par la suite.

Enplus, j'utilise la valeur this->Atitre par exemple, sans chiffre après, dans d'autres parties.
Tableau dit boucle, avec le nombre d'entré de formulaire je ne pense pas être énormément gagnant, et je serais certainement plus lourd au niveau syntaxique, à mon gout.

En plus, d'autres entrées de formulaire sont uniques, donc pas besoin de chiffre. Je ne vais pas faire de tableau pour eux avec une seule entrée ... Et si pour eux je ne fais pas de tableau, cela fait mélanger tableau et variable simple dans un code pour un seul et même formulaire (class formulaire)

Bah, je ne trouve pas cela hyper pratique dans ce cas, et limite je verrais plus un associatif avec tout dedans, le nombre de titre, de contenu, ... mais je trouve cela lourd pour ce que j'ai à faire.

Je me trompe peut être sur certains points, j'en exagère d'autres, je sais, mais bon :ah:

@HyWaN : merci pour ta solution.
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image

ViPHP
ViPHP | 4674 Messages

27 févr. 2008, 02:10

Moral de l'histoire : PHPFrance est mieux que DTPC ;-).

PS : pense à partager ta solution sur DTPC aussi, le savoir doit se partager sinon il ne sert à rien :).

PPS : et bienvenue sur PHPFrance au fait :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 16 Messages

27 févr. 2008, 02:17

Moral de l'histoire : PHPFrance est mieux que DTPC ;-).

PS : pense à partager ta solution sur DTPC aussi, le savoir doit se partager sinon il ne sert à rien :).
Tu ouvres limite un débat :ah:
DTPC est un site d'entraide en général, d'actualité aussi. Le seul spécialiste PHP qu'il y ai, est son webmaster (vin-moi en l'occurence). Je l'ai eu sur MSN, il m'a répondu vite fait, donc bon, à voir ^^
Après, PHPFrance est le site php qu'il faut consulter, niveau forum, je trouve. J'espérais bien qu'il soit "mieux" que DTPC ^^

Tkt, la solution sera partagée, je l'ai bien faite avec celle de vin-moi, pourquoi pas avec la tienne (que j'ai choisie en plus :ah:).

Moral de l'histoire : un médecin généraliste sera très bon pour tous (ou pas ^^) les problèmes, mais un spécialiste de votre problème précis sera meilleur (je l'espère pour vous :D)

RE-PPS : merci bien, j'ai commencé le php y'a pas si longtemps :ah: mais je m'amuse bien, surtout au vue des projets en cours et du prochain xD
------
-- Lenouvdu44 Propulsed by Yen (xD)
------

Image