Problème de variable

Petit nouveau ! | 6 Messages

28 juin 2009, 11:10

Bonjour! J'ai un problème pour la création d'une variable:
Je voudrais créer une variable dont le nom pourrais varier en fonction du $id. C'est à dire: $name$id. En gros si $id vaut 1 ça ferait $name1. Le seul problème, c'est que le $name est directement converti en sa valeur, c'est à dire rien du tout. Donc avec $name$id, je n'obtient que le $id. J'ai essayé de remplacer le $name par $name mais la variable de fin n'est du coup plus considéré comme une variable et donc ça affiche sur ma page $name1 alors que j'aurais voulu que ça affiche la valeur de $name1. Bref je suis pour l'instant dans l'impasse je ne trouve pour l'instant aucune solution :(.
Merci pour vos futures réponses!
Image
Image

ViPHP
ViPHP | 2291 Messages

28 juin 2009, 11:20

Salut,

Montre nous ton code stp, c'est plus facile pour t'aider.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 1511 Messages

28 juin 2009, 11:23

Et si tu utilisais un tableau ?
$name[$id]

Petit nouveau ! | 6 Messages

28 juin 2009, 11:35

Voilà le code:
<?php $id=($_GET['id']) ?>

<?php if (($_GET['id'])=='') {$idname="...";} 
else {$idname="$name$id" ;} ?>

<?php echo "<table border=\"2\" widht=\"753\">
<tr>
<td>
<a title=\"Nom\">$idname</a>
</td>
</tr>
</table>" ?>
Image
Image

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 juin 2009, 11:58

Utilise des accolades dans le nom de ta variable, cela te permet de la construire comme une chaine :
$id = 1;
${'name' . $id} = 'toto';
echo $name1; // affiche toto
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

28 juin 2009, 19:46

Ah merci Ryle ça marche :D.
Image
Image

Eléphant du PHP | 245 Messages

28 juin 2009, 22:20

ah oui ça c'est une fonctionnalité que je ne connaissais pas et qui est vraiment interessante

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2009, 22:37

Effectivement, c'est une possibilité du langage, mais après, c'est pas optimal.

Je pense que le temps que PHP analyse le nom de la variable, puis ailles chercher son contenu, ce doit être plus lent qu'un tableau.
De plus, ce que tu cherches à faire, c'est typiquement l'utilisation d'un tableau ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 245 Messages

14 août 2009, 12:19

Bah j'ai trouvé une utilité à cette fonctionalité, après, j'aurais pu faire autrement.

J'ai deux classe
la classe parent et la classe enfant

pour chaque classe, les properties correspondent aux colonnes d'une table
pour en fant : id_enfant,id_parent, mode,prop1,prop2,etc..
pour parent : id_parent, mode,propbis1,propbis2 ...


Je souhaite affecter à la classe enfant les propriétés de son parent.
function affecte_properties_parent()
{
parent::__construct($id_parent);
}
C'est la première solution, mais là je me dis pour peu que les colonnes aient des noms qui correspondent et qui ont des valeurs que ne signifient pas la meme chose, y a un problème. Typiquement la property "mode" va recevoir comme valeur celle de la classe parente, ce qui m'ennuie car, les modes ne servent pas à la meme chose pour chaque classe.

Du coup j'ai la solution 2
function affecte_properties_parent()
{
$resultat=mysql_query("select * from parent where id_parent=$this->id_parent");
$recapitulatif=mysql_fetrch_assoc($resultat);
foreach($recapitulatif as $id=>$valeur)
{
if(!(isset($this->$id))
          $this->$id=$valeur;
}
mysql_free_result($resultat);
}
là c'est mieux, si la property est déjà définie alors on ne prend pas celle de la classe parente.
Oui mais en fait j'ai besoin des deux modes par exemple, la ca ne va plus non plus car je n'aurait pas le mode de la classe parent
function affecte_properties_parent()
{
$resultat=mysql_query("select * from parent where id_parent=$this->id_parent");
$recapitulatif=mysql_fetrch_assoc($resultat);
foreach($recapitulatif as $id=>$valeur)
{
if(!(isset($this->{$id.'_parent'}))
          $this->{$id.'_parent'} = $valeur;


}
mysql_free_result($resultat);
}
La du coup je peux utiliser les deux modes
Grace à $enfant->mode et $enfant->mode_parent

Eléphanteau du PHP | 18 Messages

14 août 2009, 15:32

Opérateur de concaténation en PHP : .
Quelques tuto photoshop sur mon site ^^