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 ${}

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];
}
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 :
Parse error: parse error, unexpected T_STRING, expecting T_VARIABLE or '$'
Ci dessous le code :

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);
  }
Que je pose $indexname = $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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if(isset(count(${this->$indexname}))
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if (isset(count($this->.${'indexname'})))
cela foire lamentablement.

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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
settype(($this->$Urls), array());
... ça foire.

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