par
Calimero » 27 mai 2010, 18:26
Bonjour,
PHP5.x a introduit une gestion "intelligente" des affectations. Ainsi, affecter un objet à une variable assigne en fait à la variable une référence vers cet objet.
Tu as donc les trois variables qui pointent vers le même objet (ce qui explique que quand tu modifies une propriété, ça se répercute aussi dans les propriétés des autres variables : il s'agit bien du même objet dans les trois, qui a été modifié).
Par contre la "destruction" d'un objet ne se fait pas en affectant un null mais avec unset().
L'affectation d'un null à ta variable, étant donné que null n'est pas un objet, se fait normalement. La référence vers l'objet contenue auparavant dans la variable est perdue, mais il reste deux références vers ce même objet, respectivement dans les deux autres variables.
C'est pourquoi tu as dû obtenir ce résultat en lançant ton test :
Code : Tout sélectionner
object(SimpleClass)#1 (1) {
["var"]=>
string(27) "$assigned aura cette valeur"
}
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(27) "$assigned aura cette valeur"
}
Bonjour,
PHP5.x a introduit une gestion "intelligente" des affectations. Ainsi, affecter un objet à une variable assigne en fait à la variable une référence vers cet objet.
Tu as donc les trois variables qui pointent vers le même objet (ce qui explique que quand tu modifies une propriété, ça se répercute aussi dans les propriétés des autres variables : il s'agit bien du même objet dans les trois, qui a été modifié).
Par contre la "destruction" d'un objet ne se fait pas en affectant un null mais avec unset().
L'affectation d'un null à ta variable, étant donné que null n'est pas un objet, se fait normalement. La référence vers l'objet contenue auparavant dans la variable est perdue, mais il reste deux références vers ce même objet, respectivement dans les deux autres variables.
C'est pourquoi tu as dû obtenir ce résultat en lançant ton test :
[code]object(SimpleClass)#1 (1) {
["var"]=>
string(27) "$assigned aura cette valeur"
}
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(27) "$assigned aura cette valeur"
}
[/code]