JeuWeb - Crée ton jeu par navigateur
Foreach et constructeur - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Foreach et constructeur (/showthread.php?tid=772)



Foreach et constructeur - Seren - 07-02-2007

En php5 la fonction foreach permet de faire une boucle sur tous les éléments d'un tableau ou d'un objet.

J'essaye d'utiliser foreach dans le constructeur d'une classe. C'est pas par souci d'efficacité mais de fainéantise.

Plutôt que d'avoir un truc comme :

Code PHP :
<?php 
function __construct(& $array)
{
$this->pid = $array['pid'];
$this->name = $array['name'];
$this->acc_status = $array['acc_status'];
$this->faction = $array['faction'];
$this->cid = $array['cid'];
$this->role = $array['role'];
$this->password = $array['password'];
}

j'aimerais bien avoir un truc du style

Code PHP :
<?php 
function __construct(& $array)
{
foreach(
$this as $key => $value)
{
/* un code qui initialise tout :) */
}
}

Obscurément je pense qu'il y a un moyen, mais en essayant comme ça j'ai pas réussi.

$this->key = array[$key] ou un truc du style...


RE: Foreach et constructeur - gtsoul - 07-02-2007

$this->$key = array[$key]

et déclare ton tableau : $tab = Array( [a] => 'pomme', [b] => 'banane')
et tu auras :
$this->a = 'pomme';
$this->b = 'banane';


RE: Foreach et constructeur - Seren - 07-02-2007

Merci, ça marche super bien mais je comprends pas vraiment pourquoi la syntaxe $this->$key fonctionne et $this->key ne fonctionne pas, parce qu'habituellement j'utilise la deuxième syntaxe et ça fonctionne.

C'est parce qu'ici key n'est pas une véritable variable ?


RE: Foreach et constructeur - gtsoul - 08-02-2007

$key = 'machin';
$this->key renvoit la valeur de l'attribut $key de $this
$this->$key renvoit la valeur de l'attribut $machin de $this

ainsi si tu fais un foreache sur $this->key = array[$key]
l'attribut $key de $this sera sans cesse modifié ($this->key ) =array[0]; $this->key ) =array[1]; ...) mais cela n'impactera pas les autres attributs (key est invariable).
D'habitude, tu utilises la syntaxe $key = array[$key] qui fontionne.
Si tu veux comprendre les méthodes d'accès aux variables d'une classe, imagine que chaque objet soit un tableau de variable ainsi $this->key pointerait sur $this['key'], cad toujours la même variable et $this->$key pointerait sur $this[$key].