Ik ben voor het eerst bezig om een redelijk groot project te realiseren in Classes (wens van klant).
Om er voor te zorgen dat (sommige) objecten maar een keer gecreerd worden maak ik gebruik van de PHP singleton implementatie.
Mijn probleem kan ik het beste uitleggen met een stuk vrij simpele code:
De bedoeling is natuurlijk dat de laatste print ook "Dag aapjes" print. De functie getInstance van de class geeft op dit moment een copy terug van instance op het moment dat de functie getInstance werd aangeroepen (snappen jullie het nog
)
Waarschijnlijk doe ik iets niet goed met de referenties (&)
Als ik "$instance = new testClass();" vervang door "$instance =& new testClass();" dan is op een een of andere reden de static $instance altijd niet geset (isset is altijd false) en wordt er dus altijd het object opnieuw aangemaakt.
Ik heb hier op GoT en op het interweb een beetje rondgekeken, maar ik niet echt een oplossing vinden. (Wel voor PHP5 overigens)
Wat doe ik fout? Of kan dit gewoon niet?
Om er voor te zorgen dat (sommige) objecten maar een keer gecreerd worden maak ik gebruik van de PHP singleton implementatie.
Mijn probleem kan ik het beste uitleggen met een stuk vrij simpele code:
PHP:
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
| <?php class testClass { var $testVar; //constructor function testClass() { $this->testVar = "Hallo wereld"; } //singleton implementatie function &getInstance() { static $instance; if(!isset($instance)) $instance = new testClass(); return $instance; } //set de variable testVar function setTest($text) { $this->testVar = $text; } //get de vriable testVar function getTest() { return $this->testVar; } } //maak het eerste object $testObject1 = testClass::getInstance(); //zet de tekst naar aapjes $testObject1->setTest("Dag aapjes"); //maak het tweede object $testObject2 = testClass::getInstance(); //print de testObject1 testVar uit print 'testObject1: '. $testObject1->getTest() . '<br />'; //print "Dag aapjes" //print de testObject2 testVar uit print 'testObject2: '. $testObject2->getTest() . '<br />'; //print "Hallo wereld" ?> |
De bedoeling is natuurlijk dat de laatste print ook "Dag aapjes" print. De functie getInstance van de class geeft op dit moment een copy terug van instance op het moment dat de functie getInstance werd aangeroepen (snappen jullie het nog
Waarschijnlijk doe ik iets niet goed met de referenties (&)
Als ik "$instance = new testClass();" vervang door "$instance =& new testClass();" dan is op een een of andere reden de static $instance altijd niet geset (isset is altijd false) en wordt er dus altijd het object opnieuw aangemaakt.
Ik heb hier op GoT en op het interweb een beetje rondgekeken, maar ik niet echt een oplossing vinden. (Wel voor PHP5 overigens)
Wat doe ik fout? Of kan dit gewoon niet?