Ik heb een lastig probleem wat ik heb weten te herleiden tot de volgende [voorbeeld] code:
Het probleem is dat de x->r() gebruikt wordt om het x->z object te herinstantieren. x->z is allereerst een instantie van Class a; en na x->r() een instantie van Class b. Mijn probleem zit hem in het feit dat na $this->x->r(); toch echo "\ta:i2\n"; wordt uitgevoerd; ondanks dat $this->z = new b($this); x->z overschrijft. Is dit een fout in mijn denkwijze; mijn code; of een beperking waar ik niet omheen ga komen? Het unsetten van x->z werkt overigens niet; net zoals het hier gesuggereerde settype(&$this, 'null');. Heeft er hier iemand een idee hoe ik ik kan voorkomen dat a->init verder wordt uitgevoerd nadat deze zichzelf overschreven / verwijderd heeft?
Is de enige oplossing hiervoor echt het returnen uit a->init indien $this->x->r() succesvol is uitgevoerd?
PHP:
de output hiervan is: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 $x = new x(); class x { function x(){ echo "x:x1\n"; $this->z = new a($this); $this->z->init(); echo "x:x2\n"; } function r(){ echo "x:r1\n"; $this->z->destroy(); $this->z = new b($this); echo "x:r2\n"; } } class a { function a(&$x){ $this->x =& $x; echo "\ta:a\n"; } function init(){ echo "\ta:i1\n"; $this->x->r(); echo "\ta:i2\n"; } function destroy(){ echo "\ta:d1\n"; settype(&$this, 'null'); echo "\ta:d2\n"; } } class b { function b(){ echo "\tb:b\n"; } } |
code:
1
2
3
4
5
6
7
8
9
10
| x:x1
a:a
a:i1
x:r1
a:d1
a:d2
b:b
x:r2
a:i2
x:x2 |
Het probleem is dat de x->r() gebruikt wordt om het x->z object te herinstantieren. x->z is allereerst een instantie van Class a; en na x->r() een instantie van Class b. Mijn probleem zit hem in het feit dat na $this->x->r(); toch echo "\ta:i2\n"; wordt uitgevoerd; ondanks dat $this->z = new b($this); x->z overschrijft. Is dit een fout in mijn denkwijze; mijn code; of een beperking waar ik niet omheen ga komen? Het unsetten van x->z werkt overigens niet; net zoals het hier gesuggereerde settype(&$this, 'null');. Heeft er hier iemand een idee hoe ik ik kan voorkomen dat a->init verder wordt uitgevoerd nadat deze zichzelf overschreven / verwijderd heeft?
Is de enige oplossing hiervoor echt het returnen uit a->init indien $this->x->r() succesvol is uitgevoerd?
---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate