Bonjour,
La question que je me pose, c'est est-ce possible ?
J'utilise avec succès (comme ci-dessous) des variables de variables type ${}
J'ai essayé de répliquer l'idée dans le code de la fonction suivante déclarée au sein d'une classe en essayant d'appeler un attribut de cette classe (stockant une matrice de données) sous forme variable : j'ai en effet une certain nombre d'attributs qui présentent des modalités de stockage identiques et plutot que de créer une fonction pour intervenir sur chaque attribut, j'ai voulu créer une fonction unique (et donc variabilisée) ... et là gros BUG :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for ($i=0; $i<$n; $i++) { $boxmatrix[$i][0] = ${'divbox'.($i+1)}[0]; $boxmatrix[$i][1] = ${'divbox'.($i+1)}[1]; }Ci dessous le code :Parse error: parse error, unexpected T_STRING, expecting T_VARIABLE or '$'
Que je pose $indexname = $this->Urls;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Class { Var etc... // (déclarations des attributs) par exemple : var $Urls; var $Boxs; // (attributs vides au départ et stockant une serie d'indices à appel de fonction d'où une stockage en matrice de type[$i][$j] ou où [0][$j] sera par exemple chacun des indices stockés au cours du processus 0 function Change($value, $index, $indexname) { // ne gere pas les doublons $nbindex = count($index); if (isset(count($indexname)))) {:bug: $nbstore = count($indexname); $indexname[$nbstore][0] = $value; for ($i=0; $i<$nbindex; $i++) { $indexname[$nbstore][$i] = $index[$i]; } } if (!isset(count($indexname)) { $indexname[0][0] = $value; for ($i=0; $i<$nbindex; $i++) { $indexname[0][$i] = $index[$i]; } } } function ChangeUrl($value, $index) { $this->Change($value, $index, , $this->Urls); }
ou que je pose $indexname='Urls' et que je rédige la ligne buggée
avec une expression essayant de répliquer les variables de variables
par exemple :ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(isset(count(${this->$indexname}))
cela foire lamentablement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (isset(count($this->.${'indexname'})))
Ce genre de syntaxe est t'elle tout bonnement impossible ?
Le problème de vient t-il pas d'une absence de déclaration des attributs en format talbeau mais bon, si je pose :... ça foire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part settype(($this->$Urls), array());
Y a t'il un moyen radicalement différent de traiter ce problème : à savoir avoir une méthode générique Change rédigée sous forme d'une unique fonction (car les traitements à effectuer sur les différents attributs sont identiques)
Merci de votre aide
Partager