instance uitlezen in __construct

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

23/11/2010 10:45:11
Quote Anchor link
Wie kan mij dit uitleggen? Als ik de 1e keer Foo::setInstance() aanroep dan wordt in de __construct() var_dump(self::$instance) uitgevoerd. Waarom komt hier als resultaat NULL uit? Als ik vervolgens Foo::test() of nog een keer Foo::setInstance() aanroep dan krijg ik wel een object terug. Kan iemand me dat uitleggen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
Foo::setInstance(); // resultaat is NULL
Foo::test(); // resultaat is object(Foo)#4 (0)
Foo::setInstance(); // resultaat is object(Foo)#4 (0)
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class Foo
{

  static private $instance;

  public function __construct() {
    var_dump(self::$instance);
  }


  static public function setInstance() {
    self::$instance = new Foo();
  }


  static public function test() {
    var_dump(self::$instance);
  }

}

?>
Gewijzigd op 23/11/2010 10:45:36 door Ozzie PHP
 
PHP hulp

PHP hulp

23/11/2024 06:28:31
 
TJVB tvb

TJVB tvb

23/11/2010 10:49:34
Quote Anchor link
is toch logisch?
Wat je doet is:
1 aanroepen setInstance()
2 er wordt een nieuwe Foo gemaakt
3 in de constructor van Foo gebeurt een var dump van $instance
4 Foo wordt in $instance geplaatst
5 aanroepen test()
6 test doet een var dump van $instance
7 aanroepen setInstance()
8 er wordt een nieuwe Foo gemaakt
9 in de constructor van Foo gebeurt een var dump van $instance
10 Foo wordt in $instance geplaatst

de eerste vardump is bij stap 3 terwijl je pas bij stap 4 de variabele set.
 
Ozzie PHP

Ozzie PHP

23/11/2010 10:52:59
Quote Anchor link
Thanks voor je snelle reactie, maar die new Foo() die wordt toch in de setInstance() al in de variabele self::$instance gezet?
 
TJVB tvb

TJVB tvb

23/11/2010 10:56:34
Quote Anchor link
Ja, maar je maakt eerst die Foo aan, tijdens het aanmaken (in de constructor) roep je die vardump aan en daarna plaats je het in de variabelen.
 
Ozzie PHP

Ozzie PHP

23/11/2010 11:17:12
Quote Anchor link
Oke, thanks voor je input. Ik weet nu hoe ik het kan oplossen, bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.