Variables varaibles et Array : compatible ?

Variables varaibles et Array : compatible ? - PHP - Programmation

Marsh Posté le 17-03-2008 à 13:53:55    

Bonjour,
 
Je recontre un petit problème avec des variables variables... Je pourrais me lancer dans de longues explications, mais je pense que le code source (commenté) est plus explicite.
 
Ce que j'appelle "variable variable" (reprenant ainsi la terminologie du Site du Zéro) est la construction suivante :  

$test = 1;
$string = 'test' ;
echo ${$string} ;

Ce code source affiche "1".
 
Cette construction fonctionne également dans le cas suivant :  

$shinigami_test = 1 ;
$string = 'test' ;
echo${'shinigami_' . $string} ;


 
Pour ma part, je cherche à combiner cela avec un array, de la façon suivante :

$var_tab['img1'] = 10 ;
$var = 1;
echo ${'var_tab[\'img' . $var . '\']'} ;

Cela devrait afficher 10, mais ça n'affiche rien.
 
J'ai également testé le passage par une variable intermédiaire :

$var_tab['img1'] = 10 ;
$var1 = 1 ;
$string = 'var_tab[\'' . $var . '\']' ;
echo $string ; // Pour test. Affiche var_tab['img1'].
$echo ${$string} ;

Mais le résultat est aussi peu probant.
 
Est-ce que par hasard l'un d'entre vous saurait comment résoudre ou contourner le problème ?
 
Merci beaucoup !

Reply

Marsh Posté le 17-03-2008 à 13:53:55   

Reply

Marsh Posté le 17-03-2008 à 14:30:56    

echo ${'var_tab'}['img'.$var];

 

${'var_tab'} est ta variable dans laquelle tu vas chercher l'élément "numéro" ['img'.$var]

Message cité 1 fois
Message édité par art_dupond le 17-03-2008 à 14:31:58

---------------
oui oui
Reply

Marsh Posté le 17-03-2008 à 14:41:43    

art_dupond a écrit :

echo ${'var_tab'}['img'.$var];
 
${'var_tab'} est ta variable dans laquelle tu vas chercher l'élément "numéro" ['img'.$var]


Pourquoi les accolades ?
Je pense (pas testé) que ça devrait suffire :

Code :
  1. echo $var_tab['img'.$var];

Message cité 1 fois
Message édité par kao98 le 17-03-2008 à 14:42:08

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 17-03-2008 à 14:44:41    

Shinigami Delroen a écrit :

Bonjour,
 
Je recontre un petit problème avec des variables variables... Je pourrais me lancer dans de longues explications, mais je pense que le code source (commenté) est plus explicite.
 
Ce que j'appelle "variable variable" (reprenant ainsi la terminologie du Site du Zéro) est la construction suivante :  

$test = 1;
$string = 'test' ;
echo ${$string} ;

Ce code source affiche "1".


 
Je n'ai rencontré qu'une raison valable d'utiliser un jour cette immonde syntaxe qui rend le code illisible, et c'était à cause des limitations de php...tu es sûr que tu ne peux pas utiliser un simple tableau pour faire ce que tu fais?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-03-2008 à 14:46:04    

skeye a écrit :


 
Je n'ai rencontré qu'une raison valable d'utiliser un jour cette immonde syntaxe qui rend le code illisible, (...)


T'as réussi à en trouver une ?  :ouch:  
Bravo !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 17-03-2008 à 14:48:03    

kao98 a écrit :


T'as réussi à en trouver une ?  :ouch:
Bravo !


oui, en essayant de wrapper la couche oci8 dans des classes maison. Sinon j'avais des problèmes de passages par référence des variables bindées pour récupérer le résultat de la clause returning (si mes souvenirs sont bons).[:petrus75]


Message édité par skeye le 17-03-2008 à 14:48:12

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-03-2008 à 14:50:09    

kao98 a écrit :


Pourquoi les accolades ?
Je pense (pas testé) que ça devrait suffire :

Code :
  1. echo $var_tab['img'.$var];



oui, j'ai juste modifié son code sans réfléchier :p

  

skeye, tu pourrais donner "la raison valable" :)

 

edit: oups :p


Message édité par art_dupond le 17-03-2008 à 14:50:21

---------------
oui oui
Reply

Marsh Posté le 17-03-2008 à 19:53:51    

Pour ma part, la raison valable, c'est que j'ai un form avec 5 fichiers img1 à 5, donc ça me permet de boucler sur le tableau $_FILE (y'a peut-etre des fonctions mieux foutues pour le parcours de tableau ceci dit...)
 
EDIT : Je vais étudier le array_map, mais sinon la syntaxe $var_tab['img' . $var] fonctionne.
 
Merci beaucoup !


Message édité par Shinigami Delroen le 17-03-2008 à 20:01:03
Reply

Marsh Posté le 17-03-2008 à 20:43:54    

oui sauf que pour ta bonne raison, tu n'emploies plus le truc moche :)
 
 
 
ps: pour parcourir un tableau, y a foreach


---------------
oui oui
Reply

Marsh Posté le 17-03-2008 à 20:57:23    

skeye a écrit :

Je n'ai rencontré qu'une raison valable d'utiliser un jour cette immonde syntaxe qui rend le code illisible, et c'était à cause des limitations de php...


 

kao98 a écrit :


T'as réussi à en trouver une ?  :ouch:  
Bravo !


 
Les gars, mais les gars, quoi !  :sweat:  
 

Code :
  1. abstract class EntityObject {
  2.  
  3.  /**
  4.   * Constructs the class.
  5.   */
  6.  public function __construct() {
  7.  }
  8.  
  9.  /**
  10.   * Destroys the class.
  11.   */
  12.  public function __destruct() {
  13.  }
  14.  
  15.  /**
  16.   * Intercepts calls on accessors (getters and setters)
  17.   */
  18.  public function __call($method, $attrs) {
  19.    $prefix  = substr($method, 0, 3);
  20.    $suffix  = chr(ord(substr($method, 3, 1)) + 32);
  21.    $suffix .= substr($method, 4);
  22.    $cattrs  = count($attrs);
  23.    if (property_exists($this, $suffix)) {
  24.       if ($prefix == 'set' && $cattrs == 1) {
  25.           return $this->__set($suffix, $attrs[0]);
  26.       }
  27.       if ($prefix == 'get' && $cattrs == 0) {
  28.           return $this->__get($suffix);
  29.       }
  30.    }
  31.    trigger_error('The method '.$method.' doesn\'t exist.');
  32.  }
  33.  
  34.  /**
  35.   * Gets the value of the given member
  36.   */
  37.  public function __get($member) {
  38.    return $this->{$member};
  39.  }
  40.  
  41.  /**
  42.   * Sets the given value to the given member
  43.   */
  44.  public function __set($member, $value) {
  45.    $this->{$member} = $value;
  46.  }
  47. }


 
 :hello:

Message cité 1 fois
Message édité par CyberDenix le 17-03-2008 à 20:57:48

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 17-03-2008 à 20:57:23   

Reply

Marsh Posté le 17-03-2008 à 21:39:14    

CyberDenix a écrit :

 

Les gars, mais les gars, quoi !  :sweat:

 

ok, lol.
Le jour où ton getter doit retourner autre chose que la valeur exacte d'un membre il se passe quoi?
Le jour où ton setter doit vérifier la valeur passée il se passe quoi?


Message édité par skeye le 17-03-2008 à 21:40:24

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-03-2008 à 22:09:09    

C'est normal si je comprends plus rien à ce que les gens répondent dans ce topic ?   :pt1cable:  
 
(je savais meme pas qu'on pouvait faire de l'objet en PHP...)
 

Citation :

oui sauf que pour ta bonne raison, tu n'emploies plus le truc moche :)


Ah oui, très juste, j'avais pas pensé à ça ^^
 
Après avoir regardé array_map, ça fait pas vraiment ce que je veux (comme son nom l'indique, c'est une fonction de mapage, donc si elle agit sur un tableau, elle renvoie un tableau.)  
 
Pour le "foreach", merci, mais finalement ce n'est pas nécessaire, vue la simplicité de la syntaxe retenue (je la garde quand meme sous le coin du coude, au cas où !)
 

Reply

Marsh Posté le 18-03-2008 à 09:52:46    

Shinigami Delroen a écrit :

C'est normal si je comprends plus rien à ce que les gens répondent dans ce topic ?   :pt1cable:  
 
(je savais meme pas qu'on pouvait faire de l'objet en PHP...)
 

Citation :

oui sauf que pour ta bonne raison, tu n'emploies plus le truc moche :)


Ah oui, très juste, j'avais pas pensé à ça ^^
 
Après avoir regardé array_map, ça fait pas vraiment ce que je veux (comme son nom l'indique, c'est une fonction de mapage, donc si elle agit sur un tableau, elle renvoie un tableau.)  
 
Pour le "foreach", merci, mais finalement ce n'est pas nécessaire, vue la simplicité de la syntaxe retenue (je la garde quand meme sous le coin du coude, au cas où !)
 


 
Tu peux aussi éventuellement passer tes images dans un tableau directement dans $_FILES, non? Il se passe quoi si tu nommes tous tes input type=file montableau[]? J'ai jamais essayé, mais c'est à regarder, pour faire encore un peu plus propre...:p


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed