Bonjour, j'essaye de faire discuter 2 objet, dans cette exemple je ne comprend pas ce code
d'habitue on fait un "setter" sur un attributmiseajout->setpseudo='nouveau pseudo') or ici c'est sur une class (class 01)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $unO2->setO1($unO1)
qu'est ce qu'on fait ici? on met a jour l'attribut à l'aide du constructeur
j'ai essayer de faire des var_dump pour voir ce qui se passe:
donc il affiche comme 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 <?php $unO2 = new O2(); echo "<h3>dump un02</h3>"; var_dump($unO2); echo "<br/>"; $unO1 = new O1($unO2); echo "<h3>dump un01</h3>"; var_dump($unO1); echo "<br/>"; $unO2->setO1($unO1); echo "<h3>dump un02</h3>"; var_dump($unO1); ?> <?php class O1 { private $lienO2; public function __construct(O2 $unO2) { // notez le typage de largument du constructeur echo "je commence la class2<br/>"; $this->lienO2 = $unO2; var_dump($unO2); echo '<br/>'; } public function jeTravaillePourO1() { print("je travaille pour O1 <br> \n"); $this->lienO2->jeTravaillePourO2(); // envoi de message vers la classe O2 } public function jeTravailleAussiPourO1() { print("je travaille aussi pour O1 <br> \n"); } } ?>
comment peut t'on expliquer simplement ce qui se passe?
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 je precharge 02 la class2 dump un02 object(O2)#1 (1) { ["lienO1":"O2":private]=> NULL } je commence la class2 object(O2)#1 (1) { ["lienO1":"O2":private]=> NULL } dump un01 object(O1)#2 (1) { ["lienO2":"O1":private]=> object(O2)#1 (1) { ["lienO1":"O2":private]=> NULL } } dump un02 object(O1)#2 (1) { ["lienO2":"O1":private]=> object(O2)#1 (1) { ["lienO1":"O2":private]=> object(O1)#2 (1) { ["lienO2":"O1":private]=> object(O2)#1 (1) { ["lienO1":"O2":private]=> *RECURSION* } } } }
************************************************
voici le code original
merci de vos réponses
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 <?php class O1 { private $lienO2; public function __construct(O2 $unO2) { // notez le typage de largument du constructeur $this->lienO2 = $unO2; } public function jeTravaillePourO1() { print("je travaille pour O1 <br> \n"); $this->lienO2->jeTravaillePourO2(); // envoi de message vers la classe O2 } public function jeTravailleAussiPourO1() { print("je travaille aussi pour O1 <br> \n"); } } $unO2 = new O2();//ne fait rien pour le moment $unO1 = new O1($unO2);//avec le constructeur attribut $lient02=l'instance de la class 02 $unO2->setO1($unO1);//met a jour l'instance de la classe 02 $unO1->jeTravaillePourO1();//ici démarrage je travail pour 02 $unO2->jeTravaillePourO2(); ?> <?php class O2 { private $lienO1; public function jeTravaillePourO2() { print ("je travaille pour O2 ***<br> \n"); $this->lienO1->jetravailleAussiPourO1(); // envoi de message vers la classe O1 } public function setO1(O1 $unO1) { // la méthode réalise lassociation avec la première classe $this->lienO1 = $unO1; } } ?>
Partager