La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
Cela voudrait-il dire qu'en 'pushant' (voir ligne array_push ci-dessus)
dans le tableau, je viens d'en faire une copie par valeur ?
On a déjà eu un thread complet là dessus et sur la copie implicite. Il y a
- Ai-je bien compris la problémtaique ? (-> push par valeur...)
Pour moi oui.
- Si oui, est-il alors possible de pusher par référence ? (avec & ?)
De mémoire ... Et bien je sais plus. Je crois bien que oui, pas de raisons.
- Si non, comment font les meilleurs codeurs objet en php ?
Sauf si j'ai compris ton soucis de travers (parfaitement possible) je dirais
Cela voudrait-il dire qu'en 'pushant' (voir ligne array_push ci-dessus)
dans le tableau, je viens d'en faire une copie par valeur ?
On a déjà eu un thread complet là dessus et sur la copie implicite. Il y a
- Ai-je bien compris la problémtaique ? (-> push par valeur...)
Pour moi oui.
- Si oui, est-il alors possible de pusher par référence ? (avec & ?)
De mémoire ... Et bien je sais plus. Je crois bien que oui, pas de raisons.
- Si non, comment font les meilleurs codeurs objet en php ?
Sauf si j'ai compris ton soucis de travers (parfaitement possible) je dirais
Cela voudrait-il dire qu'en 'pushant' (voir ligne array_push ci-dessus)
dans le tableau, je viens d'en faire une copie par valeur ?
On a déjà eu un thread complet là dessus et sur la copie implicite. Il y a
- Ai-je bien compris la problémtaique ? (-> push par valeur...)
Pour moi oui.
- Si oui, est-il alors possible de pusher par référence ? (avec & ?)
De mémoire ... Et bien je sais plus. Je crois bien que oui, pas de raisons.
- Si non, comment font les meilleurs codeurs objet en php ?
Sauf si j'ai compris ton soucis de travers (parfaitement possible) je dirais
Tu ne donne pas assez de contexte pour qu'on puisse l'affirmer de façon
formelle (on ne sait pas, à ce stade, si $unNoeud est lui-même l'objet
ou un référence,
il faudrait tracer tout l'appel), mais il semblerait
que ce soit bien le cas.Dans ce cas, les modifs sur l'objet lui-même ne seront pas répercutées ?
Non, puisque dans ce cas c'est une copie
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
Tu ne donne pas assez de contexte pour qu'on puisse l'affirmer de façon
formelle (on ne sait pas, à ce stade, si $unNoeud est lui-même l'objet
ou un référence,
il faudrait tracer tout l'appel), mais il semblerait
que ce soit bien le cas.
Dans ce cas, les modifs sur l'objet lui-même ne seront pas répercutées ?
Non, puisque dans ce cas c'est une copie
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
Tu ne donne pas assez de contexte pour qu'on puisse l'affirmer de façon
formelle (on ne sait pas, à ce stade, si $unNoeud est lui-même l'objet
ou un référence,
il faudrait tracer tout l'appel), mais il semblerait
que ce soit bien le cas.Dans ce cas, les modifs sur l'objet lui-même ne seront pas répercutées ?
Non, puisque dans ce cas c'est une copie
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
Le 25 Aug 2003 17:18:17 GMT,
Bruno Desthuilliers disait :
(snip)
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
Hélas non, le fait de rajouter un '&' n'a rien changé.
Il semblerait que ce soit toujours une copie de mes objets qui sont
stockés dans ce tableau.
Je ne sais pas trop comment debugguer un truc pareil. Des idées ?
Le 25 Aug 2003 17:18:17 GMT,
Bruno Desthuilliers <bdesth.nospam@perso.free.fr> disait :
(snip)
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
Hélas non, le fait de rajouter un '&' n'a rien changé.
Il semblerait que ce soit toujours une copie de mes objets qui sont
stockés dans ce tableau.
Je ne sais pas trop comment debugguer un truc pareil. Des idées ?
Le 25 Aug 2003 17:18:17 GMT,
Bruno Desthuilliers disait :
(snip)
La bonne solution consiste à passer le noeud fils par référence :
class Node {
function ajouterFils(&unNoeud) {
array_push($this->mesFils, $unNoeud);
}
}
Note le & avant le nom du paramètre dans le prototype de ajouterFils().
Là, tu n'a pas à t'embêter avec les appels, le problème est réglé avant.
Hélas non, le fait de rajouter un '&' n'a rien changé.
Il semblerait que ce soit toujours une copie de mes objets qui sont
stockés dans ce tableau.
Je ne sais pas trop comment debugguer un truc pareil. Des idées ?
Bonjour,
Je me replonge dans un mini code en objet, et j'avoue avoir un peu de mal.
Merci aux spécialistes de m'éclairer et de me conseiller.
J'ai un objet 'node' qui décrit un noeud dans un arbre.
Cet objet contient parmi ses attributs un tableau de ses noeuds fils.
Cet objet 'node' dispose d'une méthode 'ajouterFils', qui effectue un
array_push($this->mesFils, $unNoeud);
Je remplis ainsi un arbre, et ça marche.
J'accède ensuite à un noeud en partant du sommet, et j'accède ainsi à tous
les noeuds.
Maintenant, si je modifie l'attribut d'un noeud, je ne vois pas la modif vu
du top.
Cela voudrait-il dire qu'en 'pushant' (voir ligne array_push ci-dessus)
dans le tableau, je viens d'en faire une copie par valeur ?
Dans ce cas, les modifs sur l'objet lui-même ne seront pas répercutées ?
Alors mes questions :
- Ai-je bien compris la problémtaique ? (-> push par valeur...)
- Si oui, est-il alors possible de pusher par référence ? (avec & ?)
- Si non, comment font les meilleurs codeurs objet en php ?
Bonjour,
Je me replonge dans un mini code en objet, et j'avoue avoir un peu de mal.
Merci aux spécialistes de m'éclairer et de me conseiller.
J'ai un objet 'node' qui décrit un noeud dans un arbre.
Cet objet contient parmi ses attributs un tableau de ses noeuds fils.
Cet objet 'node' dispose d'une méthode 'ajouterFils', qui effectue un
array_push($this->mesFils, $unNoeud);
Je remplis ainsi un arbre, et ça marche.
J'accède ensuite à un noeud en partant du sommet, et j'accède ainsi à tous
les noeuds.
Maintenant, si je modifie l'attribut d'un noeud, je ne vois pas la modif vu
du top.
Cela voudrait-il dire qu'en 'pushant' (voir ligne array_push ci-dessus)
dans le tableau, je viens d'en faire une copie par valeur ?
Dans ce cas, les modifs sur l'objet lui-même ne seront pas répercutées ?
Alors mes questions :
- Ai-je bien compris la problémtaique ? (-> push par valeur...)
- Si oui, est-il alors possible de pusher par référence ? (avec & ?)
- Si non, comment font les meilleurs codeurs objet en php ?
Bonjour,
Je me replonge dans un mini code en objet, et j'avoue avoir un peu de mal.
Merci aux spécialistes de m'éclairer et de me conseiller.
J'ai un objet 'node' qui décrit un noeud dans un arbre.
Cet objet contient parmi ses attributs un tableau de ses noeuds fils.
Cet objet 'node' dispose d'une méthode 'ajouterFils', qui effectue un
array_push($this->mesFils, $unNoeud);
Je remplis ainsi un arbre, et ça marche.
J'accède ensuite à un noeud en partant du sommet, et j'accède ainsi à tous
les noeuds.
Maintenant, si je modifie l'attribut d'un noeud, je ne vois pas la modif vu
du top.
Cela voudrait-il dire qu'en 'pushant' (voir ligne array_push ci-dessus)
dans le tableau, je viens d'en faire une copie par valeur ?
Dans ce cas, les modifs sur l'objet lui-même ne seront pas répercutées ?
Alors mes questions :
- Ai-je bien compris la problémtaique ? (-> push par valeur...)
- Si oui, est-il alors possible de pusher par référence ? (avec & ?)
- Si non, comment font les meilleurs codeurs objet en php ?
function &add(&$obj) {
$this->items[] = &$obj;
// set parent object
$obj->parent = &$this;
return ($obj);
}
function &add(&$obj) {
$this->items[] = &$obj;
// set parent object
$obj->parent = &$this;
return ($obj);
}
function &add(&$obj) {
$this->items[] = &$obj;
// set parent object
$obj->parent = &$this;
return ($obj);
}
Marc wrote in news::
[...]function &add(&$obj) {
$this->items[] = &$obj;
// set parent object
$obj->parent = &$this;
return ($obj);
}
Ici, il y a deux choses que je ne comprends pas.
(snip)
2) (Aucun rapport, mais) Je ne comprends pas non plus le $this->items[] =
&obj; dans une fonction add.
Je pensais que tu aurais ajouté &$obj à la fin du tableau items[] ... ?
Marc <__quinton__@free.fr> wrote in news:3F4B8707.9010901@free.fr:
[...]
function &add(&$obj) {
$this->items[] = &$obj;
// set parent object
$obj->parent = &$this;
return ($obj);
}
Ici, il y a deux choses que je ne comprends pas.
(snip)
2) (Aucun rapport, mais) Je ne comprends pas non plus le $this->items[] =
&obj; dans une fonction add.
Je pensais que tu aurais ajouté &$obj à la fin du tableau items[] ... ?
Marc wrote in news::
[...]function &add(&$obj) {
$this->items[] = &$obj;
// set parent object
$obj->parent = &$this;
return ($obj);
}
Ici, il y a deux choses que je ne comprends pas.
(snip)
2) (Aucun rapport, mais) Je ne comprends pas non plus le $this->items[] =
&obj; dans une fonction add.
Je pensais que tu aurais ajouté &$obj à la fin du tableau items[] ... ?
1) Pourquoi un '&' devant le nom de la fonction ?
Je pensais que ce n'était nécessaire que lorsqu'on souhaite obtenir une
référence vers une fonction, et pas dans le cas où on retourne une
référence vers un objet.
Dans ce cas, c'est bien un objet qu'on retourne.
Pourquoi toucher à la fonction ?
(Ok pour le '&' devant l'argument, là je comprends)
2) (Aucun rapport, mais) Je ne comprends pas non plus le $this->items[] =
&obj; dans une fonction add.
Je pensais que tu aurais ajouté &$obj à la fin du tableau items[] ... ?
1) Pourquoi un '&' devant le nom de la fonction ?
Je pensais que ce n'était nécessaire que lorsqu'on souhaite obtenir une
référence vers une fonction, et pas dans le cas où on retourne une
référence vers un objet.
Dans ce cas, c'est bien un objet qu'on retourne.
Pourquoi toucher à la fonction ?
(Ok pour le '&' devant l'argument, là je comprends)
2) (Aucun rapport, mais) Je ne comprends pas non plus le $this->items[] =
&obj; dans une fonction add.
Je pensais que tu aurais ajouté &$obj à la fin du tableau items[] ... ?
1) Pourquoi un '&' devant le nom de la fonction ?
Je pensais que ce n'était nécessaire que lorsqu'on souhaite obtenir une
référence vers une fonction, et pas dans le cas où on retourne une
référence vers un objet.
Dans ce cas, c'est bien un objet qu'on retourne.
Pourquoi toucher à la fonction ?
(Ok pour le '&' devant l'argument, là je comprends)
2) (Aucun rapport, mais) Je ne comprends pas non plus le $this->items[] =
&obj; dans une fonction add.
Je pensais que tu aurais ajouté &$obj à la fin du tableau items[] ... ?
Et peut-on voir la classe dont dérive cette classe ?
Et peut-on voir la classe dont dérive cette classe ?
Et peut-on voir la classe dont dérive cette classe ?