Bonjour,
Je m'initie aux classes sous PHP5 et j'avoue
que je patauge un peu.
En ce moment je cherche à savoir comment passer un objet de classe A
en paramètre à une méthode de classe B.
J'y suis plus ou moins arrivé mais certains résultats me laisse perplexe.
Voici mon code:
et le résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 class A { private $attr1; public function __construct() { $this->attr1 = 5; echo '__construct A<br />'; } public function __destruct() { echo '__destruct A<br />'; } public function add() { $this->attr1 = $this->attr1 + 2; } public function getAttr1() { return $this->attr1.'<br />'; } } class B { public function __construct() { echo '__construct B<br />'; } public function __destruct() { echo '__destruct B<br />'; } public function func(&$o) { $o = unserialize($o); $o->add(); echo $o->getAttr1(); } } $a = new A(); echo $a->getAttr1(); $b = new B(); $oa = serialize($a); $b->func($oa); echo $a->getAttr1(); echo 'fin du script.<br />';
l'objet $a n'a pas été modifié, ce qui est logique puisque ce__construct A
5
__construct B
7
5
fin du script.
__destruct A
__destruct B
__destruct A
n'est pas lui qui est passé en paramètre mais sa copie serializée.
Ce que je ne comprend pas c'est pourquoi il y a 2 appels au destructeur
de A alors qu'il n'y a qu'une seule instanciation ?
Dans le but de modifierl'objet lui-même j'ai modifié 2 lignes de code:
et le résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $a = serialize($a); $b->func($a);
l'objet $a est bien modifié, par contre le 1er appel au destructeur A__construct A
5
__construct B
__destruct A
7
7
fin du script.
__destruct B
__destruct A
se fait au niveau de serialize et non plus à la fin du script.
Ceci dit je ne comprend toujours pas ces 2 appels au destructeur.
Quelqu'un pourrait-il m'éclairer ?
Merci
Partager