$obj = new Classe(...); # recopie $obj = &new Classe(...); # reference (pas de recopie)
* de meme, dans la déclaration des fonctions et méthodes, il faut faire attention ; si tu ne veux pas de recopie pour raison de performence, ou pour gerer un arbre d'objet par exemple, tu dois la encore faire ceci :
function ma_methode($str, $obj) { # c'est une recopie $this-> obj = $obj; }
function ma_methode($str, &$obj) { # c'est une référence
# il me semble que le & n'est pas nécessaire (mais pas genant) # puisqu'on a deja une référence; # une reference sur une reference est toujours une référence, $this-> obj = $obj; }
J'ai un probleme avec un code de ce genre.
Ca marche en php5, mais en php4 je sais pas comment faire (ou placer les & )
oui, php5 gere les objets par référence de facon implicite et pas php4.
Merci de votre aide.
* tout affectation (signe =) d'objet par defaut effectue une recopie de
l'objet.
$obj = new Classe(...); # recopie
$obj = &new Classe(...); # reference (pas de recopie)
* de meme, dans la déclaration des fonctions et méthodes, il faut faire
attention ; si tu ne veux pas de recopie pour raison de performence, ou
pour gerer un arbre d'objet par exemple, tu dois la encore faire ceci :
function ma_methode($str, $obj) { # c'est une recopie
$this-> obj = $obj;
}
function ma_methode($str, &$obj) { # c'est une référence
# il me semble que le & n'est pas nécessaire (mais pas genant)
# puisqu'on a deja une référence;
# une reference sur une reference est toujours une référence,
$this-> obj = $obj;
}
$obj = new Classe(...); # recopie $obj = &new Classe(...); # reference (pas de recopie)
* de meme, dans la déclaration des fonctions et méthodes, il faut faire attention ; si tu ne veux pas de recopie pour raison de performence, ou pour gerer un arbre d'objet par exemple, tu dois la encore faire ceci :
function ma_methode($str, $obj) { # c'est une recopie $this-> obj = $obj; }
function ma_methode($str, &$obj) { # c'est une référence
# il me semble que le & n'est pas nécessaire (mais pas genant) # puisqu'on a deja une référence; # une reference sur une reference est toujours une référence, $this-> obj = $obj; }
loufoque
Marc a dit le 13/01/2005 09:31:
oui, php5 gere les objets par référence de facon implicite et pas php4.
En PHP5, si on fait $obj = new stdClass; $obj2 = $obj; $obj->var = 'test'; unset($obj); var_dump($obj2);
on n'a pas NULL (ce qui serait le cas si on mettait des & partout). Attention, donc.
En fait, ce n'est pas vraiment des références.
Marc a dit le 13/01/2005 09:31:
oui, php5 gere les objets par référence de facon implicite et pas php4.
En PHP5, si on fait
$obj = new stdClass;
$obj2 = $obj;
$obj->var = 'test';
unset($obj);
var_dump($obj2);
on n'a pas NULL (ce qui serait le cas si on mettait des & partout).
Attention, donc.