[PHP] Variabele klassenaam maar dan voor singleton

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik maak in m'n code gebruik van een variabele klassenaam (en objectnaam) zoals hier:

$$var = new $var();

Maar nu wil ik ditzelfde doen voor een singleton klasse, echter ik krijg dit niet werkend. De volgende code werk niet:

$$var = $var::getInstance();

De error is: Parse error: parse error, unexpected T_PAAMAYIM_NEKUDOTAYIM

Weet iemand misschien een oplossing?

[ Voor 7% gewijzigd door Verwijderd op 15-03-2006 14:10 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zo'n paamayim nekudotayim is een of andere vreemde benaming voor die dubbele dubbele punt. Je zal dus geen gebruik kunnen maken van die notatie. Je kan proberen of ie het zo pakt: ${var}::getInstance(), maar ik betwijfel het. Variabele variabelen vind ik sowieso in 99 van de 100 gevallen onnodig en over het algemeen vies; is er hier geen andere oplossing mogelijk?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Werkt inderdaad niet en ik heb in dit geval geen andere oplossing of ik moet met hele lange switch constructies gaan werken. Maar als een variabele klassenaam kan dan moet dit toch ook wel mogelijk zijn...

Acties:
  • 0 Henk 'm!

  • wica
  • Registratie: Februari 2002
  • Laatst online: 21-02 09:21

wica

De duivel jacht op me

Dit zou denk ik moeten werken
PHP:
1
eval('$'.$var.'='.$var.'::getInstance()');

[ Voor 43% gewijzigd door wica op 15-03-2006 14:34 . Reden: typo's ]

RFC | The Linux Document Project | gentoo.


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
Een oplossing met behulp van eval() misschien?

edit:
Spuit 11 :+

[ Voor 24% gewijzigd door SH4D3H op 15-03-2006 14:34 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik kwam net heel toevallig nog een andere oplossing tegen, voor degenen die het willen weten:

$$var = call_user_func(array($var, 'getInstance'));

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Je maakt nu wel elke keer een kopie, in plaats van het object door te geven. Houd je daar rekening mee?

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Juist, een singleton in PHP is nogal tricky; je moet op de juiste plekken ampersands meegeven anders gaat het mis. Sterker nog; in veel online php tutorials hoe-maak-ik-een-singleton wordt het verkeerd voorgedaan en wordt er gewoon een kopie gemaakt.

Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Deze zou je moeten hebben:
PHP:
1
$$var =& call_user_func(array($var, 'getInstance'));


Zo krijg je netjes een reference terug.
Pagina: 1